难过的吃手手

  博客园  :: 首页  :: 新随笔  ::  :: 订阅 订阅  :: 管理

LINQ 是一种查询表达式,那么什么是查询表达式?

查询表达式是以查询语法表示的查询,由一组用类似于 SQL 或 XQuery 的声明性语法所编写的子句组成。

查询表达式必须以 from 子句开头,它指定数据源以及范围变量。 范围变量表示遍历源序列时,源序列中的每个连续元素。 

同时会基于数据源中元素的类型进行强类型化。

且必须以 select 或 group 子句结尾。 在第一个 from 子句与最后一个 select 或 group 子句之间,可以包含以下这些可选子句中的一个或多个:whereorderbyjoinlet,甚至是其他 from 子句。

使用 group 子句可生成按指定键组织的组的序列。 键可以是任何数据类型。

 

 

下面的代码示例演示一个简单查询表达式,它具有一个数据源、一个筛选子句、一个排序子句并且不转换源元素。 该查询以 select 子句结尾。

static void Main()
{
    // Data source.
    int[] scores = { 90, 71, 82, 93, 75, 82 };

    // Query Expression.
    IEnumerable<int> scoreQuery = //query variable
        from score in scores //required
        where score > 80 // optional
        orderby score descending // optional
        select score; //must end with select or group

    // Execute the query to produce the results
    foreach (int testScore in scoreQuery)
    {
        Console.WriteLine(testScore);
    }
}
// Outputs: 93 90 82 82

 

查询变量:在 LINQ 中,查询变量是存储查询,而不是查询结果的任何变量。

在上面的示例中,scoreQuery 是查询变量,它有时仅仅称为查询。 查询变量不存储在 foreach 循环生成中的任何实际结果数据。 并且当 foreach 语句执行时,查询结果不会通过查询变量 scoreQuery 返回。 而是通过迭代变量 testScore 返回。 scoreQuery 变量可以在另一个 foreach 循环中进行循环访问。 只要既没有修改它,也没有修改数据源,便会生成相同结果。

提供查询变量的显式类型以便显示查询变量与 select 子句之间的类型关系。 但是,还可以使用 var 关键字指示编译器在编译时推断查询变量(或任何其他局部变量)的类型。

 

可以在 select 或 group 子句中使用 into 关键字创建存储查询的临时标识符。

// percentileQuery is an IEnumerable<IGrouping<int, Country>>
var percentileQuery =
    from country in countries
    let percentile = (int) country.Population / 10_000_000
    group country by percentile into countryGroup
    where countryGroup.Key >= 20
    orderby countryGroup.Key
    select countryGroup;

// grouping is an IGrouping<int, Country>
foreach (var grouping in percentileQuery)
{
    Console.WriteLine(grouping.Key);
    foreach (var country in grouping)
        Console.WriteLine(country.Name + ":" + country.Population);
}

 

posted on 2021-12-29 13:44  难过的吃手手  阅读(3)  评论(0)    收藏  举报