LINQ语法详解

本文概述

  • 编写LINQ查询的要求
  • 什么是查询?
在开始LINQ查询语法之前, 我们将讨论与LINQ语法相关的一些基本术语:
编写LINQ查询的要求 要编写LINQ查询, 我们需要以下三件事:
  1. 数据源(内存中的对象, SQL, XML)
  2. 询问
  3. 执行查询
什么是查询? 查询不过是一组指令。查询将应用于数据源(即内存中的对象, SQL, XML等)以执行操作(即CRUD操作)并显示该查询的输出形状。这意味着查询对输出内容不负责;相反, 它负责输出的形状。
每个查询是三件事的组合;他们是:
  1. 初始化(用于特定的数据源)
  2. 条件(位置, 过滤条件, 排序条件)
  3. 选择(单选, 组选或加入)
LINQ是” 语言集成查询” 的首字母缩写。主要功能是允许用户使用查询语法以代码内的SQL查询样式编写查询。
.NET框架在LINQ中提供了一组内置查询关键字, 以允许用户编写SQL样式查询。
LINQ有三种编写查询的方式:
  • 使用查询语法
  • 使用方法语法
  • 使用混合语法
LINQ查询语法
LINQ是以可访问且可读的格式编写复杂的LINQ查询的最简单方法之一。这种查询的语法与SQL查询非常相似。
LINQ的语法为:
LINQ语法详解

文章图片
在LINQ中, 我们遵循某些规则来编写LINQ查询。语法与SQL不同。为了用LINQ编写查询, 需要遵循以下语法层次结构:
from < variable> in < collection> < where, joining, grouping, operators, etc.> < lambda expression> < select or groupBy operator> < format the results>

【LINQ语法详解】在LINQ中编写查询时, 将遵循此顺序。 LINQ的起点将从” from” 关键字开始, 后跟一个用户定义的变量, 后跟一个in, 它指定数据的集合或引用的源, 后跟一个where子句。如果在选择离子之前可以使用特定查询来过滤记录和选择, 则后面跟着, 并将其分组为子句。
LINQ查询中子句的顺序将如下所示:
Clauses Description
From [Identifier]
In [资料来源]
Let [Expression]
Where [Boolean Expression]
order by [Expression]
Select [Expression]
group by [Expression]
into [Expression]
C#中LINQ查询的代码片段
C#中的LINQ查询语法
int[] Num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; IEnumerable< int> result = from numbers in Numwhere numbers > 3select numbers;

现在, 通过以下示例, 我们将了解如何使用LINQ查询语法:
示例:我们有一个整数列表, 我们需要编写一个LINQ查询, 该查询将返回所有大于5的整数。在这里, 我们将创建一个控制台应用程序。
使用查询语法的示例
using System; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; namespace ConsoleApp1{classProgram{staticvoid Main(string[] args){//Data SourceList< int> integerList = new List< int> (){1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //LINQ Query using Query SyntaxvarQuerySyntax = fromobjinintegerListwhereobj> 5selectobj; //Executionforeach (var item inQuerySyntax){Console.Write(item + " "); }Console.ReadKey(); }}}

现在我们将运行该应用程序, 它将显示值6、7、8、9、10, 如下面控制台窗口中的输出所示。
输出
LINQ语法详解

文章图片
LINQ语法详解

文章图片
LINQ方法语法
如今, 方法语法成为编写LINQ查询的最流行方法。它使用lambda表达式来定义查询的条件。方法语法易于编写简单查询, 以对特定数据源执行读写操作。对于复杂的查询, 方法语法比查询语法要难一些。
在这种方法中, LINQ查询是通过使用多种方法并将其与点(。)组合而成的。
对于这种方法, 语法为:
LINQ语法详解

文章图片
现在, 我们将使用LINQ方法语法来重写同一示例:
using System; usingSystem.Collections.Generic; usingSystem. Linq; usingSystem. Text; usingSystem.Threading.Tasks; namespace ConsoleApp1{classProgram{staticvoid Main(string[] args){//Data SourceList< int> integerList = new List< int> (){1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //LINQ Query using Method SyntaxvarMethodSyntax = integerList.Where(obj => obj> 5).ToList(); //Executionforeach (var item inMethodSyntax){Console.Write(item + " "); }Console.ReadKey(); }}}

输出
LINQ语法详解

文章图片
LINQ混合语法
LINQ混合语法是Query和MethodSyntax的组合。
LINQ语法详解

文章图片
示例:现在, 我们正在更改需求。首先, 我们需要过滤值大于5的列表, 然后需要计算总和。
using System; usingSystem.Collections.Generic; usingSystem. Linq; usingSystem. Text; usingSystem.Threading.Tasks; namespace ConsoleApp1{classProgram{staticvoid Main(string[] args){//Data SourceList< int> integerList = new List< int> (){1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //LINQ Query using Mixed SyntaxvarMethodSyntax = (fromobjinintegerListwhereobj> 5selectobj).Sum(); //ExecutionConsole.Write("Sum Is : " + MethodSyntax); Console.ReadKey(); }}}

现在我们运行该应用程序, 它将显示总和为40, 如下面控制台窗口中的输出所示。
输出
LINQ语法详解

文章图片

    推荐阅读