我有一个现有的控制器动作,如下所示。
Public Function List(ByVal UserID As Integer, Optional ByVa; Filter As String = Nothing) As ActionResult
Dim records
If Filter IsNot Nothing Then
records = context.Contacts.Where(Function(x) x.UserID = UserID and x.Name.Contains(Filter))
Else
records = context.Contacts.Where(Function(x) x.UserID = UserID)
End If
return View(records)
End Function
我希望简化如下。
Public Function List(ByVal UserID As Integer, Optional ByVa; Filter As String = Nothing) As ActionResult
Dim records = context.Contacts.Where(Function(x) x.UserID = UserID)
If Filter IsNot Nothing Then
records = records.Where(Function(x) x.Name.Contains(Filter))
End If
return View(records)
End Function
如果通过过滤器,它是否会触发两个查询,或者它是否足够智能以仅触发一个查询?
答案 0 :(得分:1)
试一试,看看!
启动SQL Management Studio(或类似版本)并加载SQL事件探查器,连接到数据库并查看有哪些传入查询。
理论上,没有理由为什么EF4不能将其作为单个op运行,因为直到第二次应用where子句之后才会发出数据请求。
答案 1 :(得分:0)
是的,一个查询 - 这是IQueryable接口的本质。在访问IQueryable的枚举器之前,返回IQueryable 的所有方法都不会执行任何操作。