假设我users
List<User>
,User
类具有Type
和Age
属性。
我希望按某种条件过滤该用户列表,并根据条件对每个项目执行某些操作。让此列表包含10个用户,其中一些属于"complex"
类型,其中一些"simple
&#34;。我希望我的最终列表是年龄超过30岁的用户,如果用户类型为&#34;复杂&#34;,要对其执行某些操作,然后将其添加到最终列表中。它应该是这样的:
var users= users.Where(u => u.Age > 30
and if u.Type = "complex" ? u = doSomething(u)).ToList();
如果doSomething(u)
返回null,则跳过当前&#34; u&#34;被添加到列表中。
这是一半正确的代码,一半是伪代码,因为我不知道如何使if u.Type = "complex" ? u = doSomething(u)
部分适合LINQ表达式。怎么办呢?
编辑:如果我想在Age&gt;的最终lsit用户中如何做到这一点30 OR用户类型=&#34;复杂&#34; (和复杂用户的doSomething())?
答案 0 :(得分:3)
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();
答案 1 :(得分:0)
我会做以下事情:
users.Where(u => u.Age > 30).Select((u) =>
{
if (u.Type == "complex")
{
// Do something
}
return u;
}).ToList();
选择所有年龄> gt的用户; 30然后根据类型属性更改结果。
编辑: 对于您的编辑问题,只需将条件添加到where:
[...].Where(u => u.Age > 30 || u.Type == "complex")[...]
答案 2 :(得分:0)
好吧,我想出了一些生病的变种......
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();
答案 3 :(得分:0)
AND QUERY
var andList = users.Where(u => u.Age > 30 && (u.Type == "complex" && doSomething(u) != null)).ToList();
OR QUERY
var orList = users.Where(u => u.Age > 30 || (u.Type == "complex" && doSomething(u) != null)).ToList();