c#中的LINQ
LINQ概述
LINQ(Language Integrated Query , 即“语言集成查询”)。
它的提出就是为了提供一种跨越各种数据源的统一的查询方式。LINQ使对这些数据源进行的操作变得更加简单、方便和易于理解,之前的技术都过于繁琐。
具体教程看这个官方文档就够了:
再补充一个:https://www.cnblogs.com/anding/p/18942909
包含四个组件
- Linq to Objects:对任何类型的c#内存对象提供查询,比如数组、列表和其它集合类型。
- Linq to XML组件。(之前用XPath)
- Linq to SQL组件。(之前用ADO.NET)
- Linq to DataSet组件。
LINQ的本质:lambda表达式和扩展方法的组合,是对方法的调用。
写 linq 查询有两种方式
-
方法语法:使用标准的方法的调用。这些方法是一组叫做标准查询运算符的方法。注意:返回标量的运算符立即执行,返回集合的在遍历时执行。
-
查询语法:看上去像sql语句,使用查询表达式形式书写
在一个查询中可以组合两种形式。反正编译器最终会把他们翻译成标准查询运算符即方法调用的形式。
查询表达式
Linq 查询结果一般是延迟执行的,即结果只是一个查询计划,就像你仅仅是组织了一段SQL 查询代码,但是还没有执行。当对查询结果进行遍历(foreach)的时候,才会真的执行查询。这个特点叫延迟执行的查询。
对数据源执行Count、Max、Average 和 First 此类查询,是立即执行的,这些类型的查询返回单个值。
要强制立即执行任何查询并缓存其结果,需对查询表达式调用 ToList 或 ToArray 方法。
List<int> numQuery2 = (from num in numbers where (num % 2) == 0 select num).ToList();
如果查询表达式等号左边是(var 变量名)或(IEnumerable<T> 变量名),则查询一直到处理枚举时才会执行;注意,如果枚举被处理多次,查询就会执行多次。
如果查询表达式返回标量,等号左边是(int/string/等 变量名),查询会立即执行,并且把查询结果放在查询变量中。
常用的LINQ 举例
where、Any、Count、orderby、select、groupby,都是常用到。
判断“有没有符合条件的数据”:
- Any
- Count
由于Any只关心“有没有符合条件的数据”,而不关心符合条件的有几条数据,但是Count要计算有几条数据,因此在执行的时候,Any只要遇到一个满足条件的数据就停止继续向后检查数据,但是Count则要一直计算到最后一条才能知道满足条件的数据条数,因此通常用Any实现的效率比用Count实现的更高。如果只是想判断数据是否存在,请使用Any方法。
获取一条数据:
Single:如果确认有且只有一条满足要求的数据,那么就用Single方法。如果没有满足条件的数据,或者满足条件的数据多于一条,Single方法就会抛出异常。SingleOrDefault:如果确认最多只有一条满足要求的数据,那么就用SingleOrDefault方法。如果没有满足条件的数据,SingleOrDefault方法就会返回类型的默认值。如果满足条件的数据多于一条,SingleOrDefault方法就会抛出异常。First:如果满足条件的数据有一条或者多条,First方法就会返回第一条数据;如果没有满足条件的数据,First方法就会抛出异常。FirstOrDefault:如果满足条件的数据有一条或者多条,FirstOrDefault方法就会返回第一条数据;如果没有满足条件的数据,FirstOrDefault方法就会返回类型的默认值。
一个健壮的程序,不应该隐藏异常,而是有了异常要及早暴露出来,以避免引起更大的问题。???
分组查询时

联合查询,类似SQL联结两个表进行查询 ,用 join
更新于:2023-04-17

浙公网安备 33010602011771号