2010-07-19 25 views
2

由於IEnumerable.Contains()方法不接受謂詞作爲參數,大多數人使用下面的代碼來檢查的東西存在匹配條件:在Linq中,如何查找一個集合是否包含一個沒有使用Count(謂詞)的元素?

// ProductId is unique. 
if (Products.Count(c => c.ProductId = 1234) == 1) 
{ 
    // Products list contains product 1234. 
} 

此代碼勢力通過走的每一件產品和檢查如果匹配。真的沒有必要這樣做。

查看Linq-to-SQL生成的SQL代碼時,存在同樣的問題。發送select count(*) ... where ProductId = @p0聲明,而不是if exists

如何通過Linq找到一個包含符合條件的項目,而不必遍歷集合中的每個元素並計算匹配數量?

回答

14

你可以嘗試

if (Products.Any(c => c.ProductId = 1234)) 
{ 
//do stuff 
} 

不知道是否使用了,如果存在,不過你可以試試,看看被髮送。

+0

它的工作原理。 Sql查詢是'select(case when exists(...)then 1 else 0 end)'。謝謝。 – 2010-07-19 09:17:14

1

如果你想檢驗一個條件,你可以使用下面的代碼

if(Products.Any(p => p.ProductID == 1234)) 
{ 
    //do sth 
} 

,但如果你要檢查,如果不喜歡p.ProductID == 1234任何條件存在任何行,你應該做到以下幾點

if(Products.Any(p => p != null)) 
{ 
//do sth 
} 
相關問題