思考一个关于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<>,尖括号里面最后一个参数是返回值,今天也一直没转过弯来,浆糊了,记成第一个参数是返回值了。 以此为戒。 

 

  

posted @ 2016-06-21 17:55  狂乱贵公子  阅读(259)  评论(0编辑  收藏  举报