我与LINQ合作实体的剃刀。我有这样的事情:LINQ到EF返回所有列,而不是通过WHERE子句到服务器
@foreach(Org o in Model) {
@foreach(User u in o.Users.Where(x => x.Active==true)) {
<span> @u.FirstName </span>
}
}
当我看到SQL Server事件探查器,查询有两个主要的低效率:
- 它返回用户表中的所有列
- 它返回的所有行Users表,而不仅仅是那些具有Active == true的表。
当然,它的工作正常,但我在印象之下LINQ比这更聪明,并会发送一个更具体的查询到SQL服务器。
问:我能LINQ转嫁WHERE子句(主动==真),也只能自动获得名字列?
p.s.除非严格相关,否则我对LINQ在视图中是否是好的实践并不感兴趣 - 例如,如果视图的优化方式与编译的代码不同?
这是我的控制器代码:
public ActionResult Index()
{
xyz_Entities db = new xyz_Entities();
return PartialView(db.Orgs);
}
更新 - 很多道歉,这其实是一个嵌套的循环,这可能是材料。
您没有正确地处理您的数据上下文。如果您打算从您的视图访问db.Users,则不能在Controller中处理它。 – 2013-02-21 15:00:15
好的 - 但这本身会影响我试图解决的问题吗? – rwalter 2013-02-21 15:30:42
不,但是如果您要将'IQueryable <>'传递给视图,那么您的下一个问题就是您的DataContext超出了范围,并且EF会引发异常。 – 2013-02-22 16:29:18