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

      

  • 相关阅读:
    Iview多行表单增删、表单校验
    Linux常用命令+Git命令
    前端架构师图谱
    第八章学习心得
    第七章学习心得
    第6章学习心得
    第5章学习总结
    第四章心得体会
    第三章学习心得
    第二章学习心得
  • 原文地址:https://www.cnblogs.com/saving/p/5604503.html
Copyright © 2011-2022 走看看