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

      

  • 相关阅读:
    vim官方教程
    vim命令
    vim设置——/home/.vimrc设置
    Django中静态及媒体文件的引用设置
    博客园特效,拖动鼠标吸附线条
    机器学习工具Octave安装(Win10环境)
    【原】Coursera—Andrew Ng斯坦福机器学习(0)——课程地址和软件下载
    Anaconda 安装教程(Win10环境) Tensorflow安装
    博客园 设置各级标题样式
    Android WebView 捕捉点击的URL中的信息
  • 原文地址:https://www.cnblogs.com/saving/p/5604503.html
Copyright © 2020-2023  润新知