• 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而准备的

  • 相关阅读:
    oracle函数查询数据字典
    股票市场不是年轻人应该去的地方
    惊蟄
    大学问
    教条示龙场诸生
    生成器表达式
    三次锁定(文件加强版)
    文件的增删改查
    Python试题(1)
    Python入门(1)
  • 原文地址:https://www.cnblogs.com/Khadron/p/Linq_selectqueryexpression.html
Copyright © 2020-2023  润新知