• lambda高级查询


    1. 什么是lambda表达式

        Lambda 表达式,是一种简化的匿名函数,可用于创建委托或表达式目录树。

        其次,也可以将 Lambda 表达式作为参数进行传递,或者将它作用于函数调用值调用后返回的一个函数来使用。 经常在 LINQ 中使用 Lambda 表达式。

    2. Lambda的组成

     

    3. Lambda表达式

       表达式在 => 运算符右侧,称“lambda 表达式”。lambda 表达式常用于 LINQ 和构建表达式树,它也允许返回结果。

       基本形式:( 输入参数 ) => 表达式 。

       1) ( ) => true;

       2) x => x == 1;

       3) (x) => x == 1;

       4) (x, y) => x == y;

       当 lambda 表达式有且只有一个输入参数的时侯,括号(“()”)才是可选的。 括号内存在多个输入参数时使用“,”进行分割。

       也可以选择显式指定类型,一般只有在编译器难以或无法准确推断输入类型的时候。

    4. Lambda语句

       lambda 语句和上面的 lambda 表达式相比,只是多了个大括号(“{ }”)。  

       基本形式:( 输入参数 ) => { 表达式 } 。

    5. 异步Lambda

       通过 async 和 await 关键字,我们可以很简单并快速的创建包含异步处理的 lambda 表达式和语句。

       1) Async

       2) Await

    6. Linq中使用Lambda

       许多 LINQ 中的参数都是一种委托类型的参数,如 Func<T, TResult>,可以定义输入参数以及返回类型。

       public delegate TResult Func<TArg0, TResult>(TArg0 arg0)  

       Func<int, bool> 表示:int 为输入参数,bool 为返回值。

       Func<int, int, bool> 表示:2个 int 为输入参数,一个 bool 为返回值。

    示例:

      1) Func<int, bool> myFunc = x => x == 250;  

      2) var result = myFunc(1314);

      C# 的编译器可以自动推断输入参数的类型,即便是多个输入参数,当然,也可以选择显式指定。

      1) var nums = new[] { 2, 5, 0 };

      2) var query = nums.Count(x => x > 2);

      3) var query2 = nums.Count<int>(x => x < 2);

          var PageCount = list.Count();
          var data = list.OrderBy(p => p.Id).Skip((PageIndex - 1) * PageSize).Take(PageSize).ToList();
          Pagedata pp = new Pagedata();
          pp.List = data;
          pp.PageCount = PageCount / PageSize + (PageCount % PageSize == 0 ? 0 : 1);

    7. Lambda中的类型推断

              编译器会根据 Lambda 主体、参数的委托类型以及 C# 语言规范和其它等一些因素,对所写的 Lambda 进行类型推断。

             

             由于源数据是一个 int 数组,即我要查的数据为 IEnumerable<int> 类型,编译器在这里自动推断元素为 int 类型,

            意味着 Count 方法内的 x 你可以通过 “.” 在 VS 中显示对应 int 类型的属性和方法。

    8. Lambda的特点

       1) Lambda 中包含输入参数的数量,必须与委托类型包含的参数数量一致。

       2) Lambda 中的每个输入参数,必须都能够通过隐式转换为其对应的委托参数类型

       3) Lambda 中的返回值(如果有),必须能够隐式转换为委托的返回类型

         喜欢的可以点个赞!

  • 相关阅读:
    uboot的启动过程-FDT
    pat练习
    也不知道 为什么没通过 -------------存疑 ---延后解决
    刚认识--博客园
    MapReduce报错Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio
    Hadoop 学习笔记(十)HDFS 之 集群安全模式 & DateaNode
    Hadoop 学习笔记(九)HDFS 之 NameNode & SecondaryNameNode
    sqlldr 报错:Field in data file exceeds maximum length 解决方法
    Hadoop 学习笔记(八)HDFS 数据的读写
    Hadoop 学习笔记(七)HDFS 客户端操作(下)
  • 原文地址:https://www.cnblogs.com/delusion/p/13209995.html
Copyright © 2020-2023  润新知