List c#中Linq中的Where子句

本文关键字:Where 子句 中的 Linq List | 更新日期: 2023-09-27 18:22:29

我有一个这样的结构:

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

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

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

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

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

但我如何按测试列表的系列筛选此选择?像这样的东西:

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

此Where子句仅适用于字符串列表中的选定名称

有什么办法吗?

List c#中Linq中的Where子句

只需将Where放在Select:之前

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

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

在使用Select只选择一个属性之前,先使用Where进行筛选。这样,你仍然可以得到完整的对象:

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

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

如果切换,则可以对测试对象进行筛选,然后只返回那一个字符串。

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

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

您应该首先应用where子句和select您想要的数据:

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