思考一个关于Lambda表达式做为linq条件的问题
有一个集合如下
List<User> users = new List<User> { new User{Name = "1",Aget = 12}, new User{Name = "1",Aget = 14}, new User{Name = "1",Aget = 15}, new User{Name = "1",Aget = 12}, new User{Name = "1",Aget = 12}, new User{Name = "1",Aget = 16}, new User{Name = "1",Aget = 12}, new User{Name = "1",Aget = 12}, new User{Name = "1",Aget = 12}, new User{Name = "1",Aget = 12}, new User{Name = "1",Aget = 12}, };
现在我要用Linq查询这个集合
var newList = users.Where(u => u.Aget > 12 || u.Name == "1").ToList();
但有时候,where里面有条件有多个‘或’关系的时候,如果全部写在这个括号里面,会很难看,影响了代码的可阅读性。我想到的方法是把这个表达式写入在外面。写个委托到外面来。
Func<User, bool> express = u => u.Aget > 12 || u.Name == "1";
然后查询写成这样
Func<User, bool> express = u => u.Aget > 12 || u.Name == "1";
var newList = users.Where(express).ToList();
这样就好多了,但我想把 u.Aget > 12 这句话放在where里面去。最终写成这样。
Func<User, bool> express = u => u.Name == "1";
var newUsers = users.Where(u => u.Aget > 12 || express.Invoke(u)).ToList();
没错,用委托的Invoke方法,今天脑子转不过弯来了。
还有就是泛型委托方法,Func<>,尖括号里面最后一个参数是返回值,今天也一直没转过弯来,浆糊了,记成第一个参数是返回值了。 以此为戒。