zoukankan      html  css  js  c++  java
  • c# linq 学习

    最近因为工作需要开始学习linq了,之前接触过一些c#,但基础并不牢靠。现在再根据需要学习。这里仅作为学习过程的记录,错误之处还请评论指正。

    1、查询操作三部曲

    (1)、获取数据源

    var  db = new Northwnd(@"c: orthwnd.mdf");

    (2)、创建查询

    //查询在伦敦的客户

    var custQuery =

    from cust in db.Customers

    where cust.City == "London"

    select cust;

    (3)、执行查询

    延迟执行 

     foreach (var cust in custQuery )

                {

                    Console.WriteLine("{0}", cust);

                    Console.ReadLine();

                }

    强制立即执行任意查询并缓存其结果,可以调用 ToList<TSource>  ToArray<TSource> 方法。

    //获取数据源

                var nums = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

      //创建查询并执行

                var numQuery =

                    (from num in nums

                    where (num % 2) == 0

                    select num).ToList();

    2、详解

     获取数据源 from

      LINQ 查询中,第一步是指定数据源。像在大多数编程语言中一样,必须先声明变量,才能使用它。在 LINQ 查询中,最先使用 from 子句的目的是引入数据源和范围变量。

    //queryAllCustomers IEnumerable<Cutsomer> 类型

     //数据源 (customers) 和范围变量 (cust)

         Var queryAllCustomers =

    from cust in customers

          select cust;

    筛选:where

    最常用的查询操作是应用布尔表达式形式的筛选器,使用 where 子句生成结果

    使用熟悉的 C# 逻辑 AND&&)和 OR|| 运算符来根据需要在 where 子句中应用任意数量的筛选表达式。

    where cust.City = "London" && cust.Name = "Devon"

    where cust.City="London" ||cust.Name = "Devon"

    排序:orderby

    默认比较器将按字母顺序从 A Z 进行排序

     var queryLondonCustomers = from cust in customers

           where cust.City = "London"

           orderby cust.Name descending 

           select cust;

    联接:join

    联接运算创建数据源中没有显式建模的序列之间的关联。例如,您可以执行联接来查找位于同一地点的所有客户和经销商。在 LINQ 中,join 子句始终针对对象集合而非直接针对数据库表运行。

    var innerJoinQuery = from cust in customers

     join dist in distributors on cust.City equals dist.City

      select new {

    CustomerName = cust.Name,

    DistributorName = dist.Name

    };

     

     

    选择各个源元素的子集

     若要只选择源元素的一个成员,请使用点运算。

     var query = from cust in Customers

       select cust.City;

     若要创建包含源元素的多个属性的元素,可以使用具有命名对象或匿名类型的对象初始值设定项。

    var query = from cust in Customer

     select new {

    Name = cust.Name,

    City = cust.City

    };

    Lambda表达式

    "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。

    所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。

    例:delegate int del(int i);

    static void Main(string[] args)

    {

        del myDelegate = x => x * x;

        int j = myDelegate(5); //j = 25

    }

     

     

     

    备注:

    ● First:返回序列中的第一条记录,如果没有记录,则引发异常。

     

        ● FirstOrDefault:返回序列中的第一条记录,如果没有记录,则返回默认值。

     

        ● Single:返回序列中的唯一记录,如果没有或返回多条记录,则引发异常。

     

    ● SingleOrDefault:返回序列中的唯一记录;如果该序列为空,则返回默认值;如果该序列包含多个元素,则引发异常。

     

    分组

    group 子句用于对根据您指定的键所获得的结果进行分组。 例如,可指定按 City 对结果进行分组,使来自 London Paris 的所有客户位于单独的组内。 在这种情况下,cust.City 是键。

      var queryCustomersByCity =

          from cust in customers

          group cust by cust.City;

     

      foreach (var customerGroup in queryCustomersByCity)

      {

          Console.WriteLine(customerGroup.Key);

          foreach (Customer customer in customerGroup)

          {

              Console.WriteLine("    {0}", customer.Name);

          }

      }

  • 相关阅读:
    待整理[图片验证码的破解]
    关于反爬的思索[集合]
    关于showdoc的服务器部署[转]
    jQuery插件实现多图片和单图片上传
    FTP 图片上传
    多线程(临界点处理)
    Python可迭代对象、迭代器和生成器
    一文搞懂Python函数(匿名函数、嵌套函数、闭包、装饰器)!
    Python比较操作符、变量赋值、对象拷贝
    Python并发编程——多线程与协程
  • 原文地址:https://www.cnblogs.com/jian-96/p/10619761.html
Copyright © 2011-2022 走看看