本文概述
在开始LINQ查询语法之前, 我们将讨论与LINQ语法相关的一些基本术语:
编写LINQ查询的要求
要编写LINQ查询, 我们需要以下三件事:
- 数据源(内存中的对象, SQL, XML)
- 询问
- 执行查询
什么是查询?
查询不过是一组指令。查询将应用于数据源(即内存中的对象, SQL, XML等)以执行操作(即CRUD操作)并显示该查询的输出形状。这意味着查询对输出内容不负责;相反, 它负责输出的形状。
每个查询是三件事的组合;他们是:
- 初始化(用于特定的数据源)
- 条件(位置, 过滤条件, 排序条件)
- 选择(单选, 组选或加入)
LINQ是”语言集成查询”的首字母缩写。主要功能是允许用户使用查询语法以代码内的SQL查询样式编写查询。
.NET框架在LINQ中提供了一组内置查询关键字, 以允许用户编写SQL样式查询。
LINQ有三种编写查询的方式:
- 使用查询语法
- 使用方法语法
- 使用混合语法
LINQ查询语法
LINQ是以可访问且可读的格式编写复杂的LINQ查询的最简单方法之一。这种查询的语法与SQL查询非常相似。
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的起点将从” 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 Num
where numbers >3
select numbers;
现在, 通过以下示例, 我们将了解如何使用LINQ查询语法:
示例:我们有一个整数列表, 我们需要编写一个LINQ查询, 该查询将返回所有大于5的整数。在这里, 我们将创建一个控制台应用程序。
使用查询语法的示例
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespace ConsoleApp1
{
classProgram
{
staticvoid Main(string[] args)
{
//Data Source
List<int>integerList = new List<int>()
{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
//LINQ Query using Query Syntax
varQuerySyntax = fromobjinintegerList
whereobj> 5
selectobj;
//Execution
foreach (var item inQuerySyntax)
{
Console.Write(item + " ");
}
Console.ReadKey();
}
}
}
现在我们将运行该应用程序, 它将显示值6、7、8、9、10, 如下面控制台窗口中的输出所示。
输出
LINQ方法语法
如今, 方法语法成为编写LINQ查询的最流行方法。它使用lambda表达式来定义查询的条件。方法语法易于编写简单查询, 以对特定数据源执行读写操作。对于复杂的查询, 方法语法比查询语法要难一些。
在这种方法中, LINQ查询是通过使用多种方法并将其与点(。)组合而成的。
对于这种方法, 语法为:
现在, 我们将使用LINQ方法语法来重写同一示例:
using System;
usingSystem.Collections.Generic;
usingSystem. Linq;
usingSystem. Text;
usingSystem.Threading.Tasks;
namespace ConsoleApp1
{
classProgram
{
staticvoid Main(string[] args)
{
//Data Source
List<int>integerList = new List<int>()
{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
//LINQ Query using Method Syntax
varMethodSyntax = integerList.Where(obj =>obj> 5).ToList();
//Execution
foreach (var item inMethodSyntax)
{
Console.Write(item + " ");
}
Console.ReadKey();
}
}
}
输出
LINQ混合语法
LINQ混合语法是Query和MethodSyntax的组合。
示例:现在, 我们正在更改需求。首先, 我们需要过滤值大于5的列表, 然后需要计算总和。
using System;
usingSystem.Collections.Generic;
usingSystem. Linq;
usingSystem. Text;
usingSystem.Threading.Tasks;
namespace ConsoleApp1
{
classProgram
{
staticvoid Main(string[] args)
{
//Data Source
List<int>integerList = new List<int>()
{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
//LINQ Query using Mixed Syntax
varMethodSyntax = (fromobjinintegerList
whereobj> 5
selectobj).Sum();
//Execution
Console.Write("Sum Is : " + MethodSyntax);
Console.ReadKey();
}
}
}
现在我们运行该应用程序, 它将显示总和为40, 如下面控制台窗口中的输出所示。
输出