• Linq学习以及简单用法


    Linq学习

    Linqlanguage Intergrated Query)即语言集成查询

    LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询。用于保存和检索来自不同数据源的数据,从而消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。

    LINQ总是使用对象,因此你可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据集以及任何其他可用的LINQ提供程序格式的数据。

     

    LINQ主要包含以下三部分:

    1LINQ to Objects      主要负责对象的查询。

    2LINQ to XML           主要负责XML的查询。

    3LINQ to ADO.NET   主要负责数据库的查询。

      LINQ to SQL

      LINQ to DataSet

    LINQ to Entities

    基本LINQ查询操作:

    1)获取数据源:from

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

     var queryAllCustomers = from cust in customers4                                          

                                           select cust;

    (2)筛选:where(同样可以使用AND(&&)和OR(||)运算符)

          筛选器使查询只返回那些表达式结果为true的元素,使用where子句生成结果。                  

      var queryLondonCustomers = from cust in customers2                                   

                                                    where cust.City = "London"3                                    

                                                   select cust;

     

    (3)排序Orderby

       可以很方便的将返回的数据进行排序,orderby子句将返回的

    序列中的元素按照被排序的类型的默认比较器进行排序。

     var queryLondonCustomers = from cust in customers

                                    where cust.City = "London"

                                    orderby cust.Name descending

                                    select cust;

     

    (4)分组Group

       使用Group可以按指定的键分组结果

     var queryLondonCustomers = from cust in customers

                          group cust by cust.City;

    foreach (var queryLondonCustomer in queryLondonCustomers) 

         {    Console.WriteLine(queryLondonCustomer.Key);

           foreach (var cust in queryLondonCustomer)  

           { 

              Console.WriteLine(cust.Name);

           }   

     }

    在使用group子句结束查询时,结果采用列表的列表形式。列表中的每个元素是一个具有Key成员及根据该键分组的元素列表的对象。再循环访问生成组序列的查询时,您必须使用嵌套的foreach循环,外部循环用于访问每个组,内部循环用于循环访问每个组的成员。

     

    (5)联接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};

    LINQ 中,join 子句始终针对对象集合而非直接针对数据库表运行。  

      在 LINQ 中,您不必像在 SQL 中那样频繁使用 join,因为 LINQ 中的外键在对象模型中表示为包含项集合的属性。

    (6)选择(投影):select

      select 子句生成查询结果并指定每个返回的元素的“形状”或类型。

      例如,您可以指定结果包含的是整个 Customer 对象、仅一个成员、成员的子集,还是某个基于计算或新对象创建的完全不同的结果类型。当 select 子句生成除源元素副本以外的内容时,该操作称为“投影”。

     

    LINQ的优势

    1、熟悉的语言:开发人员不必为每种类型的数据源或数据格式学习新的语言。

    2、更少的编码:相比较传统的方式,LINQ减少了要编写的代码量。

    3、可读性强:LINQ增加了代码的可读性,因此其他开发人员可以很轻松地理解和维护。

    4、标准化的查询方式:可以使用相同的LINQ语法查询多个数据源。

    5、类型检查:程序会在编译的时候提供类型检查。

    6、智能感知提示:LINQ为通用集合提供智能感知提示。

    7、整形数据:LINQ可以检索不同形状的数据。

    top(1)

                //如果取最后一个可以按倒叙排列再取值

                var ss = (from r in db.Am_recProScheme                     

                          select r).FirstOrDefault();

     

                //()linq to ef 好像不支持 Last()

                var ss1 = db.Am_recProScheme.FirstOrDefault();

                //var ss1 = db.Am_recProScheme.First();          

     

                string sssql = "select top(1) * from Am_recProScheme";

    跳过前面多少条数据取余下的数据

                //1

                var ss = (from r in db.Am_recProScheme

                          orderby r.rpId descending

                          select r).Skip(10); //跳过前10条数据,取10条之后的所有数据   

                //2  

                var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Skip(10).ToList();

                //3

                string sssql = "select * from  (select ROW_NUMBER()over(order by rpId desc) as rowNum, * from [Am_recProScheme]) as t where rowNum>10";

    分页数据查询

                //1

                var ss = (from r in db.Am_recProScheme

                          where r.rpId > 10

                          orderby r.rpId descending

                          select r).Skip(10).Take(10); //取第11条到第20条数据                   

     

                //2 Take(10): 数据从开始获取,获取指定数量(10)的连续数据

                var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).Skip(10).Take(10).ToList();

                //3

                string sssql = "select * from  (select ROW_NUMBER()over(order by rpId desc) as rowNum, * from [Am_recProScheme]) as t where rowNum>10 and rowNum<=20";

    包含,类似like '%%'

                //1

                var ss = from r in db.Am_recProScheme

                         where r.SortsText.Contains("张")

                         select r;

                //2

                var ss1 = db.Am_recProScheme.Where(p => p.SortsText.Contains("张")).ToList();

                //3

                string sssql = "select * from Am_recProScheme where SortsText like '%张%'";

  • 相关阅读:
    error :expected initializer before
    数字转字符
    转载转载转载指针占几个字节
    转载转载转载
    二维数组1
    响应式布局
    flex布局
    wepy踩坑经历
    css命名规范(转载)
    28.设计模式
  • 原文地址:https://www.cnblogs.com/wjrelax/p/10075358.html
Copyright © 2020-2023  润新知