内部选择查询和性能

时间:2018-05-29 20:16:14

标签: c# sql-server linq linq-to-sql

考虑以下查询,是否会导致多次访问db以执行内部select语句?

Table1.Select(x=> new{
   x.T1_Name,
   x.T1_Id,
   T2 =x.Table2.Select(y=> new {
      y.T2_Name,
      y.T2_Value
   })
}).ToList();

我的猜测是它不会,因为它仍然是IQueryable,整个查询将在DB上运行,最终结果将传递给客户端。

LinqPad中,内部查询会触发对服务器的多次调用。

1 个答案:

答案 0 :(得分:0)

我敢打赌Table1是在先前查询中获得的列表,其中包含对Table2的引用。由于它是一个列表,因此已设置初始查询的结果。但是它没有实现Table2结果的内容,因此它现在将出现在这些查询中。

可能是这样的:

var Table1 = context.Table1.ToList(); // materialize Table1
var query = Table1.Select(x=> new{
   x.T1_Name,
   x.T1_Id,
   T2 =x.Table2.Select(y=> new { // Table2 not materialized, so do it now
      y.T2_Name,
      y.T2_Value
   })
}).ToList();

删除这些ToList()来电,直到您真正需要它为止。它阻止了查询提供程序完成其工作。

相关问题