1

EF/Linq-To-SQL は初めてです。SO で、IQueryable は遅延評価を行うという点で IEnumerable よりも有益であることを以前に読みました。次の簡単な例について:

var records = db.Employees.Where(x => x.EmployeeID == "3" );

if (records.Any())
{
     var topRecord = records.First();
}

IQueryable 式は 2 回評価されていますか? 結果セット内の要素をチェックするために 1 回、最初の要素を取得するときに 1 回? もしそうなら、そのような選択を実行するより効率的な方法はありますか?

4

1 に答える 1

4

はい、この場合、クエリは 2 回実行されます。最初に for Any、次に forFirstです。

おそらくFirstOrDefault代わりに使用できます:

var topRecord = db.Employees.FirstOrDefault(x => x.EmployeeID == "3" );
// topRecord will be null if there's no match

if (topRecord != null)
{
  ...
}
于 2013-03-20T14:54:49.003 に答える