当我们将结果映射到对象时,LINQ会使用延迟执行吗?
var x = from rcrd in DBContext.FooTable
select new Model.BOFoo()
{ Bar = rcrd.Bar };
上面的代码映射rcrd到Model.BOFoo对象。这种映射是否会导致LINQ从数据库中获取实际数据?或者它会等到我调用x.ToList()?
答案 0 :(得分:1)
我回答是的。如果我不想错过任何相关信息,即使我们将结果映射到对象,LINQ仍将使用延迟执行。对象初始化也将延迟。
答案 1 :(得分:1)
除非您的Linq查询包含执行查询的方法,否则它将不会执行并将被延迟。
执行查询的方法示例包括First(),FirstOrDefault(),ToList(),ToArray等。
选择不是这样的方法,甚至不选择新的。
答案 2 :(得分:0)
我总是觉得将代码视为方法链中的代码很有用:
DBContext.FooTable
.Select(rcrd=>new Model.BOFoo{Bar=rcrd.Bar});
这里更容易可视化延迟执行,因为您只是将函数传递到将根据需要进行评估的Select
。 new
仅仅是该功能的一部分。
所以,正如har07和Erik已经提到过的,如果它是一个延迟执行方法,那么它将保持这种方式,除非通过ToList
等其他方法强制执行