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

      

  • 相关阅读:
    如何测试私有/受保护的方法? (译文)
    推荐一款vs.net中的版本号管理工具,
    ILMerge 合并多个程序集为一个.
    https://XXX/.xml Error:800C000E
    an easy way to debug windows service in .net
    提高安全性, 删除IIS中的response http header
    我的<程序人生>的一点看法.
    vs.net 2005 beta2 之痛
    ANT打包
    Linq to xml: XDocument对象
  • 原文地址:https://www.cnblogs.com/saving/p/5604503.html
Copyright © 2011-2022 走看看