Razor で LINQ to Entities を使用しています。私はこのようなものを持っています:
@foreach(Org o in Model) {
@foreach(User u in o.Users.Where(x => x.Active==true) ) {
<span> @u.FirstName </span>
}
}
SQL サーバー プロファイラーを見ると、クエリには 2 つの大きな非効率性があります。
- ユーザーテーブルのすべての列を返します
- Active==true の行だけでなく、Users テーブルのすべての行を返します。
もちろん問題なく動作しますが、LINQ はこれよりも賢く、より具体的なクエリを SQL サーバーに送信するという印象を受けました。
質問: LINQ で WHERE 句 (Active==true) を渡し、FirstName 列のみを自動的に取得することはできますか?
ps厳密に関連しない限り、ビューのLINQが良い方法であるかどうかにはあまり興味がありません-たとえば、ビューがコンパイルされたコードとは異なる方法で最適化されている場合?
これは私のコントローラコードです:
public ActionResult Index()
{
xyz_Entities db = new xyz_Entities();
return PartialView(db.Orgs);
}
更新 - 多くの謝罪、これは実際にはネストされたループであり、重要な場合があります。