【发布时间】:2014-07-07 12:58:38
【问题描述】:
我有一个奇怪的 system.function LINQ 问题。如果我的 Lambda 表达式包含两次数据上下文,它将生成多个 SQL 查询,而不是(参见第二个)一个 SQL 查询。
第一
Dim whereFunction As Func(Of tasks, Boolean) = Function(task) New With {.condition =
(From i In myDataContext.taskInfo Where i.taskId = task.id).Any()
}.condition
Dim tasksLambda = myDataContext.tasks.Where(whereFunction)
Dim taskList = tasksLambda.ToList
'generates for each task one select to taskinfo on SQL Server Profiler -> bad
第二
Dim tasksNoLambda = (From task In myDataContext.tasks Where (From i In myDataContext.taskInfo Where i.taskId = task.id).Any())
taskList = tasksNoLambda .ToList
'generates only one select to tasks with subselect to taskinfo on SQL Server Profiler -> good
您能否解释一下为什么它会进行多个查询而不是子查询和/或这两个 Lambda 查询之间有什么区别。
提前致谢,
丹尼尔
【问题讨论】:
-
您正在进出
IQueryable。任何时候查询越界,它都必须进行单独的查询。 -
以及如何防止这些多个查询@Enigmativity?我真的需要这个功能。