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

      

  • 相关阅读:
    ubuntu安装到选择位置时闪退
    linux下复制一个文件的内容到另一个文件
    ssh免密码登陆
    使用pymongo需要手动关闭MongoDB Connection吗?
    关于支付宝和微信使用的浏览器
    使用poi导出固定excel的模板,出现汉字不能自动设置行宽
    使用poi进行数据的导出Demo
    遍历map集合的方法
    用来遍历map集合的方法
    Idea中用来遍历list集合的快捷键
  • 原文地址:https://www.cnblogs.com/saving/p/5604503.html
Copyright © 2011-2022 走看看