2011-02-03 80 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;