2012-07-08 56 views
3

我試圖檢查,看看是否有結果從一個實體框架查詢作用在它之前回來,我試圖用代碼: -檢查一個實體框架LINQ結果裏面的物品

var shoppingCartSessions = from c in context.ShoppingCartSessions where c.UserId == gUserID select c; 
if (shoppingCartSessions.First() != null) 
{ 
} 

但是我得到的錯誤

序列不包含任何元素

我身邊有棧檢查,發現我可以代替.First.FirstOrDefault但是我想檢查這是否是檢查元素存在的正確方法。有沒有更好的方法,而不是試圖獲取物品,然後檢查它?

+0

如果有任何的選項下面回答了你的問題,隨意接受它作爲一個答案;-) – 2012-07-09 03:06:07

回答

7

使用Any()

var shoppingCartSessions = from c in context.ShoppingCartSessions 
          where c.UserId == gUserID 
          select c; 
if (shoppingCartSessions.Any()) 
{ 
    //not empty 
} 
6

您是否試過檢查.Count() > 0

編輯: 正如馬哈茂德·賈邁勒說,使用Any()應該呈現稍好的性能,因爲它會執行一個EXISTS查詢,而不是在一個數據庫中的COUNT(),和你最終不關心確切的金額。

+0

我想我會失明,我甚至沒有看到功能!我正在檢查.Length和.Size heh。 – 2012-07-08 15:31:54

+0

請勿使用.Count()。它將執行所有項目的迭代(並且因爲您正在使用EF,所以在實現過程中將它們實現)。使用Any()來代替。 – Patrik 2012-07-08 15:42:42

+0

如果您使用'IQueryable <>',它不應該實現任何內容,而是向後端數據庫請求Count。你檢查過EF生成的實際查詢嗎? – 2012-07-08 16:02:17