对于LINQ这种表达式非常深,这里看了官方文档的实例以后,自己跟着敲了敲,整理一下以后可能会很常用的子句。
所有 LINQ 查询操作都由以下三个不同的操作组成:
- 获取数据源。
- 创建查询。
- 执行查询。
查询在 foreach 语句中执行,因此,foreach 需要 IEnumerable 或 IEnumerable< T> 。支持 IEnumerable< T> 或派生接口(如泛型 IQueryable< T> )的类型称为可查询类型。
![8552bf35c6b3e8c0bbde4a999ada8852.png](https://i-blog.csdnimg.cn/blog_migrate/75875261cf18d02ee6863cf6e03ca42a.jpeg)
复合 From 字句
比如要访问每个Student元素的内部列表,可以使用复合from子句。类似于使用嵌套的foreach语句。可以向任一from子句中添加where
或orderby子句筛选结果。
[TestClass]
使用多个from子句执行联接
public
![08e7456825b3e5d8356b4ecd990db2ec.png](https://i-blog.csdnimg.cn/blog_migrate/9bf7b04a532118817d7729d9bc5ff543.png)
public
![a9c94290c03c2269b14f9635a7abebcd.png](https://i-blog.csdnimg.cn/blog_migrate/0dfae891abe17be3dda132dabb9663f1.png)
复合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
![e1cca0a2107fb673b4b552af9b0ffc9c.png](https://i-blog.csdnimg.cn/blog_migrate/fe12572afad48b62f9a6d3909bb2c675.png)
![ff199f2fba33af5250ddf0bd790b3416.png](https://i-blog.csdnimg.cn/blog_migrate/de84d827032a867bd926160219d9ea82.jpeg)
orderby子句可导致返回的序列或子序列以升序或降序,若要执行一个或多个次级排列操作,可以指定多个键
join 子句执行的所有联接都是同等联接,join子句的输出形式取决于执行的联接具体类型。
- 内部联接
- 分组联接
- 左外部联接