LINQ:根据某些条件过滤项目列表,并按条件执行某些操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINQ:根据某些条件过滤项目列表,并按条件执行某些操作相关的知识,希望对你有一定的参考价值。
假设我有users
这是List<User>
,而User
类有Type
和Age
属性。我希望按某种条件过滤该用户列表,并根据条件对每个项目执行某些操作。让这个列表有10个用户,其中一些是类型"complex"
,其中一些是"simple
“。我希望我的最终列表是年龄超过30岁的用户,如果用户类型是”复杂“,就要对它做一些事情然后将其添加到最终列表。它应该是这样的:
var users= users.Where(u => u.Age > 30
and if u.Type = "complex" ? u = doSomething(u)).ToList();
如果doSomething(u)
返回null,则跳过当前“u”以添加到列表中。
它是一半正确的代码,一半是伪代码,因为我不知道如何将if u.Type = "complex" ? u = doSomething(u)
部分放入LINQ表达式。怎么做到呢?
编辑:如果我想在年龄> 30的最终列表用户或复杂用户使用Type =“complex”(和doSomething())的用户,该如何做?
答案
var users = users.Where(u => u.Age > 30) // common filter
.Select(u => u.Type == "complex" ? doSomething(u) : u) //select user or transformed
.Where(u => u != null) //not null only
.ToList();
另一答案
好吧,我想出了一些生病的变种......
public bool DoSomething()
{
// Do anything
return true;
}
var v = users.Where(x => x!= null && x.Age > 30 && x.Type == "Complex" && x.DoSomething() == true).ToList();
为了您的编辑:
var v = users.Where(x => x!= null && (x.Age > 30 || x.Type == "Complex") && x.DoSomething() == true).ToList();
另一答案
我会做以下事情:
users.Where(u => u.Age > 30).Select((u) =>
{
if (u.Type == "complex")
{
// Do something
}
return u;
}).ToList();
选择年龄> 30的所有用户,然后根据类型属性更改结果。
编辑:对于您的编辑问题,只需将条件添加到where:
[...].Where(u => u.Age > 30 || u.Type == "complex")[...]
另一答案
和查询
var andList = users.Where(u => u.Age > 30 && (u.Type == "complex" && doSomething(u) != null)).ToList();
或者查询
var orList = users.Where(u => u.Age > 30 || (u.Type == "complex" && doSomething(u) != null)).ToList();
以上是关于LINQ:根据某些条件过滤项目列表,并按条件执行某些操作的主要内容,如果未能解决你的问题,请参考以下文章