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的起点将从” 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语法详解

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 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混合语法

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 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, 如下面控制台窗口中的输出所示。

输出

LINQ语法详解

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?