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子句仅适用于字符串列表中的选定名称
有什么办法吗?
只需将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);