列表中的Linq中的where子句c#

时间:2015-11-18 16:09:23

标签: c# linq

我有这样的结构:

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

在我的代码中我有一个这个结构的列表:

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

我有一个像这样的linq表达式:

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

但是如何通过testList的Family过滤此选择?像这样的东西:

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

此Where子句仅适用于选定的名称,这些名称是字符串

的列表

任何想法如何做到这一点?

4 个答案:

答案 0 :(得分:12)

只需将Where放在Select

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

在Linq中,您需要在投影之前应用过滤器(除非过滤器适用于投影的结果而不是原始集合。)

答案 1 :(得分:5)

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

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

毕竟,Select将获取对象,然后只传递你在lambda中返回的任何内容。在这种情况下,您只返回一个字符串,因此您将Test对象中的所有其他信息丢弃。因此,您要过滤的信息将不再可用。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

您应该首先应用where子句,然后select使用所需的数据:

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