当我们将结果映射到对象时,LINQ to SQL是否会使用延迟执行?

时间:2014-03-14 04:15:07

标签: c# .net linq

当我们将结果映射到对象时,LINQ会使用延迟执行吗?

var x = from rcrd in DBContext.FooTable
        select new Model.BOFoo()
        { Bar = rcrd.Bar };

上面的代码映射rcrd到Model.BOFoo对象。这种映射是否会导致LINQ从数据库中获取实际数据?或者它会等到我调用x.ToList()?

3 个答案:

答案 0 :(得分:1)

我回答是的。如果我不想错过任何相关信息,即使我们将结果映射到对象,LINQ仍将使用延迟执行。对象初始化也将延迟。

答案 1 :(得分:1)

除非您的Linq查询包含执行查询的方法,否则它将不会执行并将被延迟。

执行查询的方法示例包括First(),FirstOrDefault(),ToList(),ToArray等。

选择不是这样的方法,甚至不选择新的。

答案 2 :(得分:0)

我总是觉得将代码视为方法链中的代码很有用:

DBContext.FooTable
  .Select(rcrd=>new Model.BOFoo{Bar=rcrd.Bar});

这里更容易可视化延迟执行,因为您只是将函数传递到将根据需要进行评估的Selectnew仅仅是该功能的一部分。

所以,正如har07和Erik已经提到过的,如果它是一个延迟执行方法,那么它将保持这种方式,除非通过ToList等其他方法强制执行