zoukankan      html  css  js  c++  java
  • C#Linq的10个练习

    1.LINQ的两种语法

    LINQ查询时有两种语法可供选择:查询表达式(Query Expression)和方法语法(Fluent Syntax)。
    .NET公共语言运行库(CLR)并不具有查询表达式的概念。所以编译器会在程序编译时把查询表达式转为方法语法,即对扩展方法的调用。所以使用方法语法会让我们更加接近和了解LINQ的实现和本质,并且一些查询只能表示为方法调用。但另一方面,查询表达式通常会比较简单易读。不管怎样,这两种语法是互相补充和兼容的,我们可以在一个查询中混合使用查询表达式和方法语法。

    2.一些有用的LINQ扩展方法

    扩展方法描述延期
    All如果源数据中的所有条目都与谓词匹配,则返回true
    Any如果源数据中至少有一个条目与谓词匹配,则返回true
    Contains如果数据源含有指定的条目或值,则返回true
    Count返回数据源的条目数
    First返回数据源的第一个条目
    FirstOrDefault返回数据源的第一个条目或无条目时,返回默认值
    Last返回数据源的最后一个条目
    LastOrDefault返回数据源的最后条目或无条目时,返回默认值
    Max
    Min
    返回由lambda表达式表示的最大值或最小值
    OrderBy
    OrderByDescending
    基于lambda表达式返回的值对源数据进行排序
    Reverse反转数据源中数据项的顺序
    Select设计一个查询结果
    SelectMany把每个数据项投射到一个条目序列中,然后把所有这些结果序列连接成一个序列
    Single返回数据源的第一个条目或有多个匹配时,抛出一个异常
    SingleOrDefault返回数据源的第一个条目或无条目时,返回默认值;或者有多个匹配条目时,抛出一个异常
    Skip
    SkipWhile
    跳过指定数目的元素或当谓词匹配时,跳过
    Sum对谓词选定的值求和
    Take
    TakeWhile
    从数据源的开始处选择指定数目的元素或当谓词匹配时,选择条目
    ToArray
    ToDictionary
    ToList
    把数据源转换成数组或其他集合类型
    Where过滤掉源数据中与谓词不匹配的条目


    3.LINQ查询表达式

    约束

    LINQ查询表达式必须以from子句开头,以selectgroup子句结束

     

    关键字

    功能

    fromin

    指定要查找的数据源以及范围变量,多个from子句则表示从多个数据源查找数据。

    注意:c#编译器会把“复合from子句”的查询表达式转换为SelectMany()扩展方法。

    joininonequals

    指定多个数据源的关联方式

    let

    引入用于存储查询表达式中子表达式结果的范围变量。通常能达到层次感会更好,使代码更易于阅读。

    orderbydescending

    指定元素的排序字段和排序方式。当有多个排序字段时,由字段顺序确定主次关系,可指定升序和降序两种排序方式

    where

    指定元素的筛选条件。多个where子句则表示了并列条件,必须全部都满足才能入选。每个where子句可以使用谓词&&||连接多个条件表达式。

    group

    指定元素的分组字段。

    select

    指定查询要返回的目标数据,可以指定任何类型,甚至是匿名类型。(目前通常被指定为匿名类型)

    into

    提供一个临时的标识符。该标识可以引用joingroupselect子句的结果。

    1)        直接出现在join子句之后的into关键字会被翻译为GroupJoininto之前的查询变量可以继续使用)

    2)        selectgroup子句之后的into它会重新开始一个查询,让我们可以继续引入where, orderbyselect子句,它是对分步构建查询表达式的一种简写方式。into之前的查询变量都不可再使用)


    4.复写linq语法详细中的11个例子

    1)简单的LINQ语法

    1
    2
    3
    4
    5
    6
    7
    //1
    var ss=from r in db.testTable
                    select r;
    //2
    var ss1=db.testTable;
    //3
    string sssql="selec * from testTable";

    2)带Where的查询

    1
    2
    3
    4
    5
    6
    7
    8
    //1
    var ss=from r in db.testTable
                where r.rpId>10
                select r;
    //2
    var ss1=db.testTable.Where(p=>p.rpId>10);
    //3
    string sssql="select * from testTable where rpId>10";

    3)简单函数计算

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //1
    //获取最大的rpId
    var ss=(from r in db.testTable select r).Max(p=>p.rpId);
    //获取最小的rpId
    var ss=(from r in db.testTable select r).Min(p=>p.rpId);
    //获取结果集的总数
    var ss=(from r in db.testTable select r).Count();
    //获取rpId的和
    var ss=(from r in db.testTable select r).Sum(p=>p.rpId);
     
     //2
    //var ss1 = db.testTable.Max(p=>p.rpId);
    //var ss1 = db.testTable.Min(p => p.rpId);
    //var ss1 = db.testTable.Count() ;
    var ss1 = db.testTable.Sum(p => p.rpId);
    Response.Write(ss);
     
    //3
    string sssql = "select max(rpId) from testTable";
               sssql = "select min(rpId) from testTable";
               sssql = "select count(1) from testTable";
               sssql = "select sum(rpId) from testTable";

    4)排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var ss=from r in db.testTable
                where r.rpId>10
                orderby r.rpId descending //倒序
                //orderby r.rpId ascending  //正序
                select r;
    //正序
    var ss1=db.testTable.OrderBy(p=>p.rpId).Where(p=>p.rpId>10).ToList();
    //倒序
    var ss2=db.testTable.OrderByDescending(p=>p.rpId).Where(p=>p.rpId>10).ToList();
     
    string sssql="select * from testTable where rpId>10 order by rpId [decs|asc]";

    5)top(1)

    1
    2
    3
    4
    5
    6
    7
    8
    //如果取最后一个可以按倒序排列再取值
    var ss=(from r in db.testTable select r).FirstOrDefault();
     
    //
    var ss1=db.testTable.FirstOrDefault();
    var ss1=db.testTable.First();
     
    string sssql="select top(1) * from testTable";

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

    1
    2
    3
    4
    5
    6
    7
    8
    //1
    var ss=(from r in db.testTable
                    orderby r.rpId descending
                    select r).Skip(10); //跳过前10条数据,取10条之后的所有数据
    //2
    var ss1=db.testTable.OrderByDescending(p=>p.rpId).Skip(10).ToList();
    //3
    string sssql="select * from (select ROW_NUMBER() over(order by rpId desc) as rowNum,* from testTable) as t where rowNum>10";

    7)分页数据查询

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //1
    var ss=(from r in db.testTable
                    where r.rpId>10
                    orderby r.rpId descending
                    select r).Skip(10).Take(10); //取第11条到第20条的数据
    //2.Take(10):数据从开始获取,获取指定数量的连续数据
    var ss1=db.testTable.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 testTable) as c where rowNum>10
    and rowNum<=20";

    8)包含,类似like ‘%%’

    1
    2
    3
    4
    5
    6
    7
    8
    //1
    var ss = from r in db.testTable
             where r.SortsText.Contains("张")
             select r;
    //2
    var ss1 = db.testTable.Where(p => p.SortsText.Contains("张")).ToList();
    //3
    string sssql = "select * from testTable where SortsText like '%张%'";





    参考资料

    linq语法详细

    Linq之旅:Linq入门详解(Linq to Objects)


  • 相关阅读:
    IntelliJ IDEA注册码
    linux中patch命令 -p 选项
    设备文件简介
    《算法导论》——矩阵
    《算法导论》——数论
    linux常用查看硬件设备信息命令(转载)
    netstat和telnet命令在Windows7中的用法(转载)
    c++容器使用总结(转载)
    离散数学——数论算法
    c语言中内存对齐问题
  • 原文地址:https://www.cnblogs.com/iwsx/p/7018395.html
Copyright © 2011-2022 走看看