zoukankan      html  css  js  c++  java
  • Linq之查询表达式语法详解

    1.闲言碎语

      由于项目的需要接触到Linq,刚开始有些不适应,好多概念都很模糊。不过经过一段时间的摸索,慢慢地对Linq有了一个更加深入的了解。在此记录一下备忘。

          2.查询表达式语法

    执行Linq有两种方式,一种是方法形式eg:names.Contains('K');,另一种就是查询表达式eg:var query=from n in names select n; 下面用代码来详细解释。

    string[] fruitName = { "Apple", "Pear", "Cherry", "Banana", "orange" };
    IEnumerable<string> query = from f in fruitName
                                where f.Contains("a")
                                orderby f.Length
                                select f.ToUpper();
    foreach (var str in query) {
        Console.WriteLine(str);
    }

    查询变量:简单来说就是保存查询的变量但不是查询结果,它是一个可以枚举的类型,也就是说可以用IEnumberablevar类型保存查询结果。只有在foreach它的时候才返回查询结果。用上面的code来说query就是一个查询变量

    查询表达式:查询表达式由一组用类似于 SQL 或 XQuery 的声明性语法编写的子句组成。每个子句又包含一个或多个 C# 表达式,而这些表达式本身又可能是查询表达式或包含查询表达式。--摘自MSDN

    查询表达式语法:查询表达式必须以 from 子句开头,并且必须以 selectgroup 子句结尾。在第一个 from 子句和最后一个 select group 子句之间,查询表达式可以包含一个或多个下列可选子句:whereorderbyjoinlet 甚至附加的 from 子句。还可以使用 into 关键字使 join group 子句的结果能够充当同一查询表达式中附加查询子句的源。---摘自MSDN 

    查询表达式关键字详解:  

    from:它是查询表达式的开头,同时它又定义了范围变量(Range Variable)和指定数据源。

    范围变量类似于 foreach 语句中的迭代变量,eg:

    foreach(string n in names){
    }

    上面的code中n就相当于范围变量。要注意的一点是范围变量指向的序列会随着查询子句执行而变化eg:

    string[] fruitName = { "Apple", "Pear", "Cherry", "Banana", "orange" };
    IEnumerable<string> query = from f in fruitName//f是我们定义的范围变量
                                where f.Contains("a")//f直接来自fruitName数组
                                orderby f.Length//f来自Where过滤后的序列
                                select f.ToUpper();//f来自orderby排序后的序列
    foreach (var str in query) {
        Console.WriteLine(str);
    }

    let:用来在保持范围变量的同时引入新的查询变量。eg:

    string[] fruitName = { "Apple", "Pear", "Cherry", "Banana", "orange" };
    IEnumerable<string> query = from f in fruitName
                                let v=Regex.Replace(n,”[aeiou]","")
                                where v.Length>3
                                select f;//f在这里任然有效
    foreach (var str in query) {
        Console.WriteLine(str);
    }

    select:用来指示输出查询结果的类型,用于数据转换(或投影)

    group:用来对数据分组,还sql中的分组概念一样。

    where:用来过滤符合条件的序列项

    orderby:根据指定的只来排序(升序或降序)

    join:对两个序列中键匹配的元素进行连接,常用的连接有

    • 内部联接

    • 分组联接

    • 左外部联接

    group:按照指定的键值进行分组

    into:在查询完以后可以继续查询

    子查询:嵌套from查询,和sql子查询概念一样。

    大家一看就能明白这些关键字就是为Linq to sql而准备的

  • 相关阅读:
    [ Algorithm ] N次方算法 N Square 动态规划解决
    [ Algorithm ] LCS 算法 动态规划解决
    sql server全文索引使用中的小坑
    关于join时显示no join predicate的那点事
    使用scvmm 2012的动态优化管理群集资源
    附加数据库后无法创建发布,error 2812 解决
    浅谈Virtual Machine Manager(SCVMM 2012) cluster 过载状态检测算法
    windows 2012 r2下安装sharepoint 2013错误解决
    sql server 2012 数据引擎任务调度算法解析(下)
    sql server 2012 数据引擎任务调度算法解析(上)
  • 原文地址:https://www.cnblogs.com/Khadron/p/Linq_selectqueryexpression.html
Copyright © 2011-2022 走看看