c#中的LINQ

发布时间 2023-04-17 18:43:58作者: AI大胜

LINQ概述

LINQ(Language Integrated Query , 即“语言集成查询”)。

它的提出就是为了提供一种跨越各种数据源的统一的查询方式。LINQ使对这些数据源进行的操作变得更加简单、方便和易于理解,之前的技术都过于繁琐。

具体教程看这个就够了:

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/linq/walkthrough-writing-queries-linq

包含四个组件

  • Linq to Objects:对任何类型的c#内存对象提供查询,比如数组、列表和其它集合类型。
  • Linq to XML组件。(之前用XPath)
  • Linq to SQL组件。(之前用ADO.NET)
  • Linq to DataSet组件。

查询表达式

Linq 查询结果一般是延迟执行的,即结果只是一个查询计划,就像你仅仅是组织了一段SQL 查询代码,但是还没有执行。当对查询结果进行遍历(foreach)的时候,才会真的执行查询。这个特点叫延迟执行的查询。

对数据源执行CountMaxAverageFirst 此类查询,是立即执行的,这些类型的查询返回单个值。

要强制立即执行任何查询并缓存其结果,需对查询表达式调用 ToListToArray 方法。

List<int> numQuery2 = (from num in numbers where (num % 2) == 0 select num).ToList();

如果查询表达式等号左边是(var 变量名)或(IEnumerable<T> 变量名),则查询一直到处理枚举时才会执行;注意,如果枚举被处理多次,查询就会执行多次。

如果查询表达式返回标量,等号左边是(int/string/等 变量名),查询会立即执行,并且把查询结果放在查询变量中。

LINQ的本质:lambda表达式和扩展方法的组合,是对方法的调用

写 linq 查询有两种方式

  • 方法语法:使用标准的方法的调用。这些方法是一组叫做标准查询运算符的方法。注意:返回标量的运算符立即执行,返回集合的在遍历时执行。

  • 查询语法:看上去像sql语句,使用查询表达式形式书写

在一个查询中可以组合两种形式。反正编译器最终会把他们翻译成标准查询运算符即方法调用的形式。

常用的LINQ 举例

分组查询时

image-20211129110641369

联合查询,类似SQL联结两个表进行查询 ,用 join


更新于:2023-04-17