2013-03-20 105 views
1

我是EF/Linq-To-SQL的新手。我之前讀過SO,IQueryable比IEnumerable更有益處,因爲它的評估很懶。關於以下簡單示例:IQueryable評估

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

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

IQueryable表達式是否被計算兩次?一次檢查結果集中的任何元素,一次檢索第一個元素?如果是這樣,是否有更有效的方法來進行這樣的選擇?

回答

4

是的,在這種情況下,查詢將執行兩次:首先是Any,然後是First

你很可能FirstOrDefault代替:

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

if (topRecord != null) 
{ 
    ... 
} 
+0

+1:刪除了我的(不正確)的答案。我在評估時忽略了'Any'布爾值。 – 2013-03-20 14:57:31

+0

@LukeH編輯了你的帖子,指出在哪種情況下,FirstOrDefault只會幫助執行一個查詢 – Matten 2013-03-20 14:59:00