LINQ入门

一、LINQ的体系结构

LINQ总共包括五个部分:

  • LINQ to Objects:对内存中集合的操作。
  • LINQ to XML:对XML数据源的操作。
  • LINQ to SQL:对SQL Server数据源的操作,微软把开发的重点从LINQ to SQL转移到了LINQ to Entities,并且宣布LINQ to SQL不再提供更新。
  • LINQ to Entities:是 Entity Framework的一部分,并且取代LINQ to SQL作为在数据库上使用 LINQ的标准机制。
  • LINQ to DataSets:对数据集DataTable的操作。

2011122721265876[1]

二、LINQ的语法

  LINQ查询表达式以from子句开头,以select子句或group子句结束。在两个子句之间,可以使用where、orderby,join,let等查询操作符。具有“延迟计算”的特性。

  下面是一个简单的示例,查询一个int数组中小于5的元素,并按照从小到大的顺序排列:

int[] arr = new int[] { 1, 4, 2, 6, 7, 9, 5, 1, 2, 4 };
var query = from r in arr
            where r < 5
            orderby r
            select r;
foreach (var item in query)
{
    Console.WriteLine(item);
}
Console.ReadLine();

LINQ有两种语法:Lambda语法和Query语法

编译器会在程序编译时转换LINQ查询,以调用相应的扩展方法。

     关键字有: from ,where ,select ,group ,into ,orderby,join,let,in,on,equals,by,ascending,descending等。

LINQ查询表达式

关键字

功能

from…in…

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

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

join…in…on…equals…

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

let

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

orderby、descending

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

where

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

group

指定元素的分组字段。

select

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

into

提供一个临时的标识符。该标识可以引用join、group和select子句的结果。

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

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

以下扩展方法存在对应的查询表达式关键字:

Where、Select、SelectMany、OrderBy、ThenBy、OrderByDescending、ThenByDescending、GroupBy、Join、GroupJoin。

2011102815134291[1]

三、标准查询操作符

Enumberable 类定义的标准查询操作符。 

类别

标准查询操作符

说明

筛选操作符

Where

OfType<TResult>

称为筛选操作符定义返回元素的条件。

Where     使用谓词,返回符合条件的元素。

OfType<TResult>  返回符合类型的元素。

投射操作符

Select

SelectMany

投射操作符用于把对象转换为另一个类型的新对象。

Select 和 SelectMany 定义根据选择器函数选择结果值的投射。

排序操作符

OrderBy

ThenBy

OrderByDescending

ThenByDescending

Reverse

排序操作符改变返回的元素的顺序。

Orderby 升序排序。

OrderBydescending  降序排序。

TheBy 和 ThenByDescending 二次排序。

Reverse 反转集合元素。

连接操作符

Join

GroupJoin

用于合并不直接相关的集合。

Join     根据键选择器函数连接两个集合。

GroupJoin   连接两个集合。

组合操作符

GroupBy

ToLookup

组合操作符把数据放在组中。

GroupBy   组合公共键的元素。

Tookup    创建一个一对多字典,组合元素。

限定操作符

Any

All

Contains

元素满足指定的条件。

Any 满足谓词函数的函数。

All  所有元素是否都满足谓词函数。

Contains   检查某个元素是否在集合中。

分区操作符

Take

Skip

TakeWhile

SkipWhile

返回集合的子集。

Take 从集合提取元素个数。

Skip 跳过指定的元素个数,提取其他元素。

TakeWhile 提取条件为真的元素。

Set操作符

Distinct

Union

Intersect

Except

Zip

Set操作符返回一个集合。

Distinct 删除重复的元素。

Union 返回集合中唯一元素。

Intersect  返回两个集合都有的元素。

Except  只出现在一个集合中的元素。

Zip 两个集合合并为一个元素。

元素操作符

First

FirstOrDefault

Last

LastOrDefault

ElementAt

ElementAtOrDefault

Single

SingleOrDefault

元素操作符返回一个元素。

First                 返回第一个满足条件的元素。

FirstOrDefault  类似First,如果未找到满足条件元素,返回类型的默认值。

Last                 返回最后一个满足条件的元素。

ElementAt        返回元素的位置。

Single               返回一个满足条件的元素。如果有多个元素都满足条件,就抛出一个异常。

聚合操作符

Count

Sum

Min

Max

Average

Aggregate

聚合操作符计算集合值。

Sum 总和。

Count  所有元素个数。

Min  最小元素。

Max  最大元素。

Average 平均值。

Aggregate  根据输入的表达式获取聚合值。

转换操作符

ToArray

AsEnumerable

ToList

ToDictionary

Cast<TResult>

生成操作符

Empty

Range

Repeat

Empty 空集合。

Range 返回一系列数字。

Repeat 返回始终重复一直的集合。

一、            示例业务背景介绍

示例参考《C#高级编程(第六版)》LINQ章节(P267 - P296),进行改编。

打开示例代码我们看到:

image

1.        Racer.cs 文件,定义一级方程式世界车手冠军信息。

2.        Team.cs 文件,定义一级方程式世界车队冠军信息。

3.        Formula1.cs 文件,包含两个重要静态方法:(F1是"Formula One"的缩写)

1)        GetChampions():返回一组车手列表。这个列表包含了1950到2007年之间的所有一级方程式世界车手冠军

2)        GetContructorChampions():返回一组车队列表。这个列表包含了1985到2007年之间的所有一级方程式世界车队冠军.

猜你喜欢

转载自www.cnblogs.com/springsnow/p/11286711.html