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

      

  • 相关阅读:
    学习Oracle数据库入门到精通教程资料合集
    linux编程中printf显示不加换行的缓冲问题
    让 Terminal/vim 使用 Solarized 配色
    vim插件ctags的安装和使用
    rsync 同步文件
    try catch 场景
    关于浮点型的运算---比较
    mysql数据库死锁的产生原因及解决办法
    Laravel下载地址合集
    php垃圾回收机制
  • 原文地址:https://www.cnblogs.com/saving/p/5604503.html
Copyright © 2020-2023  润新知