一、什么是LINQ
LINQ是Language-Integrated Query的缩写,它可以视为一组语言和框架特性的集合。LINQ可以对本地对象集合或远程数据源进行结构化的类型安全的查询操作。LINQ支持查询任何实现了IEnumerable<T>
接口的集合类型,无论是数组、列表还是XML DOM,乃至SQL Server数据库中的数据表这种远程数据源都可以查询。LINQ具有编译时类型检查和动态查询组合这两大优点。
二、LINQ的基本用法
2.1 流式语法
流式语法是编写LINQ表达式的最基础同时也是最灵活的方式。它允许我们使用查询运算符链构造更复杂的查询。
首先来介绍几个最常见的查询运算符Where
,OrderBy
,Select
。Where
会根据输入的条件筛选序列;OrderBy
运算符根据输入的序列生成一个排序后的版本;Select
将输入序列中的每一个元素按给定的Lambda表达式进行转换或映射。
string[] names = {
"Tom","John","Mary","LiHua","ZhangSan"};
IEnumerable<string> res = names
.Where(e => e.Contains("o"))
.OrderBy(e => e.Length)
.Select(e=>e.ToUpper());
foreach (var item in res)
{
Console.WriteLine(item);
}
// 输出结果:
// TOM
// JOHN
这些查询运算符实际上是在Enumerable
类中对IEnumerable<>
的扩展方法(以Where
为例)。通过接收一个委托来进行元素的筛选。
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
需要注意的是:查询运算符绝不会修改输入序列,相反,它会返回一个新序列。这种设计是符合函数式编程规范的,而LINQ就是起源自函数式编程。
下面再介绍一些其他的查询运算符
Take
运算符将输出前x个元素,而丢弃其他元素
// Take运算符
var res1 = names.Take(3);
foreach (var item in res1)