クエリ結果を作成するとしましょう
var query = from a in tblXYZ join c in tblABC on a.id = b.id select new {a.x, b.x};
それをビューに渡す最良の方法は何ですか? 新しいオブジェクトを作成し、クエリ結果をそれにコピーする必要がありますか?
クエリ結果を作成するとしましょう
var query = from a in tblXYZ join c in tblABC on a.id = b.id select new {a.x, b.x};
それをビューに渡す最良の方法は何ですか? 新しいオブジェクトを作成し、クエリ結果をそれにコピーする必要がありますか?
ビュー固有のモデルを作成するには、ほとんどの場合、これが推奨されるメカニズムだと思います。また、コントローラーでクエリを具体化し、ビューをリストに渡すという@Marcの推奨事項を2番目に使用します。クエリに問題がある場合、クエリがビューではなくコントローラーで実行されているかどうかを診断する方がはるかに簡単です。その時点で、スタック トレースは実際に役立ちます。
示されているように、これは匿名型になり、アクセスできます (4.0 では 経由でさらに簡単になりますdynamic
) が、そうするのは見苦しいです。また、現在、LINQ が延期されているため、データ アクセスがいつ発生するかについてあいまいさがあります。つまり、そのクエリをビューに渡すと、実際にはビュー中に (コントローラー内ではなく) データ アクセスを行っていることになります。
データ (本質的にビューモデル) を表すクラスを作成し、エンティティのリスト(遅延クエリではない) を返したいと思うでしょう。
クエリをリポジトリに入れます。コントローラーで、そのビューの指定されたモデルビューにクエリ結果を渡します。
Model-View - コントローラーからビューにデータを転送するための指定されたクラス。