2015-11-18 46 views
5

我有这样的结构:在我的代码Where子句中的LINQ名单C#

struct Test 
{ 
    string name; 
    string family; 
    public Test... 
} 

我有这个结构的列表:

List<Test> testList=new List<Test>(); 

我有一个LINQ表达式是这样的:

var list =testList.Select(n=>n.Name); 

但我怎么可以通过testList的家庭筛选此选择?是这样的:

var list=testList.Select(n=>n.Name).Where(f=>f.Family==""); 

这种Where子句只适用于它们串

任何想法如何做到这一点的列表中选择的名称?

+0

删除'Select'。 –

+1

或将其移至“Where”后面。 –

回答

9

只要把WhereSelect前:

var list=testList.Where(f=>f.Family=="").Select(n=>n.Name); 

在LINQ你需要之前应用过滤器突出(除非该过滤器适用于投影,而不是原来的集合的结果)。

4

在使用Select选择一个属性之前,使用Where进行过滤。这样一来,你仍然可以获得完整的对象:

testList.Where(t => t.Family == "").Select(t => t.Name) 

毕竟,Select将采取对象,然后只传输无论你在lambda返回。在这种情况下,您只返回一个字符串,因此您将所有其他信息从Test对象中移除。因此,您要过滤的信息不再可用。

如果切换它,可以过滤测试对象,然后只返回那一个字符串。

1

通常当我检查这样的空值时,我会使用string.IsNullOrEmpty(),以防万一。

testList.Where(f=> string.IsNullOrEmpty(f.Family)).Select(n=>n.Name);