对于LINQ这种表达式非常深,这里看了官方文档的实例以后,自己跟着敲了敲,整理一下以后可能会很常用的子句。
所有 LINQ 查询操作都由以下三个不同的操作组成:
- 获取数据源。
- 创建查询。
- 执行查询。
查询在 foreach 语句中执行,因此,foreach 需要 IEnumerable 或 IEnumerable< T> 。支持 IEnumerable< T> 或派生接口(如泛型 IQueryable< T> )的类型称为可查询类型。
复合 From 字句
比如要访问每个Student元素的内部列表,可以使用复合from子句。类似于使用嵌套的foreach语句。可以向任一from子句中添加where
或orderby子句筛选结果。
[TestClass]
使用多个from子句执行联接
public
public
复合from子句用于独立访问单个数据源中的内部集合,通过此方法可以执行使用join子句无法实现的某种联接操作。
group子句
group子句返回一个IGroup<TKey,TElement>对象序列,这些对象包含两个或更多与该组的键值匹配的项。
例如可以按照每个字符串中的第一个字母对字符串序列进行分组。
这种情况下,第一个字母就是键,char,
// Query variable is an IEnumerable<IGrouping<char, Student>>
要对每个组执行附加查询操作,可使用上下文关键字into指定一个临时标识符。
使用
从注释上看到 返回的值是一个IEnumerable<IGrouping<char, Student>>
所以我们用foreach遍历是这样:
// Iterate group items with a nested foreach. This IGrouping encapsulates // a sequence of Student objects, and a Key of type char. // For convenience, var can also be used in the foreach statement.
let
作为方法的调用结果的方便存储位置,因此无需在group子句中调用该方法两次。
class
into
关键字启用具有推断类型IGroup的临时标识符fruitGroup。
通过使用该标识符,可以对每个组调用Count方法,并且仅选择那些包含两个或者更多个单词的组。
public
orderby子句可导致返回的序列或子序列以升序或降序,若要执行一个或多个次级排列操作,可以指定多个键
join 子句执行的所有联接都是同等联接,join子句的输出形式取决于执行的联接具体类型。
- 内部联接
- 分组联接
- 左外部联接