【问题标题】:Executing ToList multiple times in IQueryable在 IQueryable 中多次执行 ToList
【发布时间】:2017-03-28 01:06:37
【问题描述】:

我正在尝试微调一些 EF 代码。我可以看到,一个 Iqueryable 被多次转换为列表。这是否意味着,EF 将按照调用 tolist 的次数执行查询(或)它是否只执行一次查询,并将为其余的 tolist 调用返回相同的结果。

【问题讨论】:

  • IQueryable<> 将被多次评估,每次你实现它。

标签: c# .net sql-server entity-framework


【解决方案1】:

每次调用 ToList 时都会评估 IQueryable,因此如果循环中有 IQueryable,这将是一个问题。例如:

var first = context.Something;

foreach(var element in first)
{
  var second = context.SomethingElse;
 //do something with second
}

//do something with first again

second 将至少被评估 first 的 length 次,而 first 将被评估至少两次。因此,您最好将第二个移到循环之外,并使用 ToList 强制执行评估,并且您将确保 IQueryable 将被评估一次,如下所示:

var first = context.Something.ToList();
var second = context.SomethingElse.ToList();

foreach(var element in first)
{
 //do something with second
 //second will not be evaluated each iteration
}

//do something with first again

【讨论】:

    【解决方案2】:

    EF 将按照调用 tolist 的次数执行查询

    这是真的。顺便调查一下 EF 查询以及它调用 DB 的时间 - 只需使用 SQL server Profiler。这是最好的方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 2016-10-11
      • 2016-12-22
      • 2015-10-06
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多