2つのモデルを結合したモデルを表示しようとしたところ、こんなエラーが出ました。
--------エラーここから--------
'/' アプリケーションでサーバー エラーが発生しました。
ディクショナリに型 'System.Collections.Generic.List`1[WordLearner.Models.WordDetail]' のモデル項目が渡されましたが、このディクショナリには型 'WordLearner.Models.WordDetail' のモデル項目が必要です。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.InvalidOperationException: ディクショナリに型 'System.Collections.Generic.List`1[WordLearner.Models.WordDetail]' のモデル項目が渡されましたが、このディクショナリには型 'WordLearner.Models.WordDetail' のモデル項目が必要です。
--------エラーここまで--------
調べてみると同じエラーで困っている人がいました。
Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery`1[]' using linq lambda expression
http://stackoverflow.com/a/22918838
そして回答も掲載されていました。今回検索結果のオブジェクトをビューに返すところを、クエリの状態でビューに渡しているのが原因でした💨
変数 query に FirstOrDefault() メソッドでオブジェクトを取得することで解決しました。
public ActionResult Test(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Word word = db.Word.Find(id);
if (word == null)
{
return HttpNotFound();
}
int _id = id.Value;
var meaning = db.Meanings;
var query = from x in db.Word
join y in meaning on x.ID equals y.WordID
where x.ID.Equals(_id)
select new WordDetail
{
ID = x.ID,
Spelling = x.Spelling,
Meaning = y.Meaning
};
return View("Details", query.FirstOrDefault());
}