2011-02-03 78 views
0

我想編寫一個LINQ查詢爲此簡單的LINQ問題()

Select id from selectedBrands 
where name='Nick' or name='Matt' 

這是正確的LINQ ????

var brandsToNotShow=new[] {"Nick","Matt"}; 
    model.Names= 

        (from s in selectedBrands 
        where brandsToNotShow.Any() 
        select s.Brand.name 
       ).ToList(); 

其中model.Names是一個列表

+1

什麼是Linq查詢應該做的?因此,它看起來不錯,但不知道你想做什麼,這很難說。 – Oded 2011-02-03 20:08:37

回答

5

不,這是不正確的。

brandsNotToShow.Any() 

詢問「有沒有這個列表中的任何元素」,答案是,是的,有兩個元素。

這個查詢可能是更接近你想要什麼:

from s in selectedBrands 
where brandsNotToShow.Contains(s.Brand.Name) 
select s.Brand.Name 

(實際上,如果它的品牌顯示,它可能是

where !brandsNotToShow.Contains(s.Brand.Name) 

我不能告訴你例如)

1

根據MSDN任何():

確定一個 序列中的任何元素是否滿足條件。

因此在您的示例Any只是檢查品牌是否有任何項目。

你可能想是這樣的:

from s in selectedBrands 
where brantsToNotShow.Contains (s.Brand.Name) 
SELECT s.Brand.Name 
1

根據你選擇的變量名很難說你想要什麼,但你的SQL的字面LINQ版本是

from brand in selectedBrands 
where brand.name == 'Nick' || brand.name == 'Matt' 
select brand.id; 

如果你有在你的代碼中的陣列或sequnce,你可以使用Contains

from brand in selectedBrands 
where nameSequence.Contains(brand.name) 
select brand.id; 

但是,如果該序列是相當大的,它可能是最好只加入到序列。

from brand in selectedBrands 
join name in nameSequence on brand.name equals name 
select brand.id;