早先使用

走进 LINQ 的世界

走进 LINQ 的世界

[C#] 伊始利用 LINQ,

 

  在此以前曾公布过3篇有关 LINQ 的随笔:

    进阶:《LINQ
标准查询操作概述》(强烈推荐)

    技巧:《Linq To Objects –
如何操作字符串》 和
《Linq To Objects –
怎么着操作文件目录》

  以后,本人打算再整治一篇关于 LINQ 入门的小说,也是呼天抢地的哦。

 

  从前曾发表过三篇有关 LINQ 的小说:

    进阶:《LINQ
标准查询操作概述》(强烈推荐)

    技巧:《Linq To Objects –
怎么着操作字符串》 和
《Linq To Objects –
怎样操作文件目录》

  未来,本身打算再整治一篇关于 LINQ 入门的小说,也是活泼的哦。

 

开始利用 LINQ 

  从前曾刊登过三篇有关 LINQ 的小说:

    进阶:《LINQ 标准查询操作概述》(强烈推荐)

    技巧:《Linq To Objects – 怎样操作字符串》 和 《Linq To Objects

  • 怎么着操作文件目录》

  以后,自身打算再整治①篇关于 LINQ
入门的随笔。为了幸免篇幅过长,最后还是接纳将代码折叠起来。

  • LINQ

目录

  • LINQ 简介
  • 介绍 LINQ
    查询
  • LINQ
    基本查询操作
  • 应用 LINQ
    进行多少转换
  • LINQ
    查询操作的类型涉及
  • LINQ
    中的查询语法和章程语法

 

目录

  • LINQ 简介
  • 介绍 LINQ
    查询
  • LINQ
    基本查询操作
  • 应用 LINQ
    实行数据转换
  • LINQ
    查询操作的体系涉及
  • LINQ
    中的查询语法和措施语法

 

  语言集成查询 (LINQ) 是 Visual Studio 二零零六 和 .NET Framework 三.5版中引进的一项立异意义。

  古板上,针对数据的询问都是以简练的字符串表示,而尚未编写翻译时类型检查或
速龙liSense
援助。其它,您还非得针对以下各样数据源学习壹种差异的查询语言:SQL
数据库、XML 文书档案、种种 Web 服务等等。 通过LINQ,
您能够运用语言关键字和了解的演算符针对强类型化对象集合编写查询。

亚洲必赢官网 1

  

  在 Visual Studio 中,能够为以下数据源编写 LINQ 查询:SQL Server
数据库、XML 文书档案、ADO.NET
数据集,以及帮助 IEnumerable 或泛型 IEnumerable<T> 接口的轻易对象集合。
  使用须求:项目 ≥ .NET Framework 三.五 。  

     语言集成查询 (LINQ) 是 Visual Studio
二零零六 中引进的1组功用,它在对象领域和多少领域之间架起了一座大桥。可为
C# 和 Visual Basic 语言语法提供有力的查询效率。 LINQ
引进了正规、易学的数量查询和更新形式,该技术能够扩张为大约帮忙任何项目标数码存款和储蓄。Visual
Studio 包蕴 LINQ 提供程序的程序集,借助这几个程序集,就能将 LINQ 用于 .NET
Framework 集合、SQL Server 数据库、ADO.NET 数据集和 XML 文书档案。

LINQ 简介

  语言集成查询 (LINQ) 是 Visual Studio 二〇〇八 和 .NET Framework 三.伍版中引进的一项创新功用。

  古板上,针对数据的询问都以以简单的字符串表示,而从未编写翻译时类型检查或
英特尔liSense
援助。别的,您还非得针对以下种种数据源学习一种不一致的查询语言:SQL
数据库、XML 文书档案、种种 Web 服务等等。 通过LINQ,
您能够使用语言关键字和熟习的演算符针对强类型化对象集合编写查询。

亚洲必赢官网 2

  

  在 Visual Studio 中,能够为以下数据源编写 LINQ 查询:SQL Server
数据库、XML 文书档案、ADO.NET
数据集,以及援助 IEnumerable 或泛型 IEnumerable<T> 接口的轻易对象集合。

  使用供给:项目 ≥ .NET Framework 3.5 。

 

LINQ 简介

  语言集成查询 (LINQ) 是 Visual Studio 二零零六 和 .NET Framework 3.伍版中引进的壹项创新功用。

  古板上,针对数据的查询都是以不难的字符串表示,而并未有编写翻译时类型检查或
AMDliSense
支持。其它,您还必须针对以下各类数据源学习1种区别的询问语言:SQL
数据库、XML 文书档案、各样 Web 服务等等。 通过LINQ,
您能够选择语言关键字和熟练的运算符针对强类型化对象集合编写查询。

亚洲必赢官网 3

  

  在 Visual Studio 中,能够为以下数据源编写 LINQ 查询:SQL Server
数据库、XML 文书档案、ADO.NET
数据集,以及援救 IEnumerable 或泛型 IEnumerable<T> 接口的随机对象集合。

  使用须要:项目 ≥ .NET Framework 叁.5 。

 

目录

  • 介绍 LINQ 查询
  • LINQ 基本查询操作
  • 利用 LINQ 举行数据转换
  • LINQ 查询操作的花色涉及
  • LINQ 中的查询语法和方塞尔维亚语法

 

  • LINQ应用场景
    • LINQ to
      Object:针对数组和聚众
    • LINQ to XML:针对XML文档
    • LINQ
      to DataSet:针对ADO的DataSet对象
    • LINQ to Entites:针对EF
    • Parallel
      LINQ:并行处理LINQ查询重临的数额
  • LINQ 查询

一、介绍 LINQ 查询

  查询是一种从数据源检索数据的表明式。随着时间的延迟,人们早已为各样数据源开发了差别的语言;例如,用于关全面据库的
SQL 和用来 XML 的
XQuery。因而,开发人士不得不针对他们必须协助的每个数据源或数量格式而读书新的询问语言。LINQ
通过提供1种跨数据源和数码格式使用数据的同壹模型,简化了那一状态。在
LINQ 查询中,始终会用到对象。能够运用同样的编码方式来询问和转移 XML
文书档案、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ
提供程序可用的别的别的格式的数目。  

 

一、介绍 LINQ 查询

  查询是1种从数据源检索数据的表明式。随着时光的延期,人们早就为各个数据源开发了区别的言语;例如,用于关全面据库的
SQL 和用来 XML 的
XQuery。因而,开发人士不得不针对他们无法不帮助的每种数据源或数额格式而学习新的查询语言。LINQ
通过提供一种跨数据源和多少格式使用数据的均等模型,简化了这一动静。在
LINQ 查询中,始终会用到目的。可以应用同样的编码情势来查询和转移 XML
文书档案、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ
提供程序可用的其余其余格式的数目。  

 

一、介绍 LINQ 查询

  查询是一种从数据源检索数据的表达式。随着岁月的推移,人们已经为各类数据源开发了差别的语言;例如,用于关周全据库的
SQL 和用来 XML 的
XQuery。由此,开发职员不得不针对他们必须辅助的每一种数据源或数额格式而读书新的询问语言。LINQ
通过提供一种跨数据源和数据格式使用数据的壹模一样模型,简化了那一意况。在
LINQ 查询中,始终会用到对象。能够选择同一的编码格局来询问和转移 XML
文书档案、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ
提供程序可用的其余别的格式的数码。  

     查询是1种从数据源检索数据的表明式。
查询普通用越发的查询语言来表示。
随着岁月的推移,人们早就为各类数据源开发了区别的语言;例如,用于关周密据库的
SQL 和用来 XML 的 XQuery。
由此,开发职员不得不针对他们必须扶助的各个数据源或数额格式而读书新的询问语言。
LINQ
通过提供1种跨各个数据源和多少格式使用数据的壹模一样模型,简化了这一动静。
在 LINQ 查询中,始终会用到对象。 能够选择同一的为小编码形式来询问和更换
XML 文书档案、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ
提供程序可用的其它其余格式的多寡。

  一.一 查询操作的七个部分

  操作叁部曲:一取多少源 贰创立查询 3实践查询

亚洲必赢官网 4亚洲必赢官网 5

 1 internal class Program
 2 {
 3         private static void Main(string[] args)
 4         {
 5             //1.获取数据源
 6             var nums = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
 7 
 8             //2.创建查询
 9             var numQuery =
10                 from num in nums
11                 where (num % 2) == 0
12                 select num;
13 
14             //3.执行查询
15             foreach (var num in numQuery)
16             {
17                 Console.WriteLine("{0}", num);
18             }
19         }
20 }

View Code

亚洲必赢官网 6

 

   下图展示了整机的询问操作。在 LINQ
中,查询的实施与查询本身截然差异;换句话说,查询本人指的是只创造查询变量,不检索任何数据。

亚洲必赢官网 7

  

  一.一 查询操作的多个部分

  操作三部曲:1取多少源 二创立查询 三进行查询

亚洲必赢官网 8亚洲必赢官网 9

 1 internal class Program
 2 {
 3         private static void Main(string[] args)
 4         {
 5             //1.获取数据源
 6             var nums = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
 7 
 8             //2.创建查询
 9             var numQuery =
10                 from num in nums
11                 where (num % 2) == 0
12                 select num;
13 
14             //3.执行查询
15             foreach (var num in numQuery)
16             {
17                 Console.WriteLine("{0}", num);
18             }
19         }
20 }

View Code

亚洲必赢官网 10

 

   下图展现了总体的查询操作。在 LINQ
中,查询的施行与查询本人截然区别;换句话说,查询自身指的是只开创查询变量,不检索任何数据。

亚洲必赢官网 11

  

  一.1 查询操作的四个部分

  操作叁部曲:一取多少源 二开立查询 3推行查询

亚洲必赢官网 12 1 internal
class Program 2 { 3 private static void Main(string[] args) 4 { 5
//1.获取数据源 陆 var nums = new int[7] { 0, 1, 贰, 三, 四, 5, 6 }; 7 8
//二.创办查询 玖 var numQuery = 10 from num in nums 1一 where (num % 二) ==
0 1二 select num; 1三 1四 //3.执行查询 一伍 foreach (var num in numQuery) 1陆{ 一7 Console.WriteLine(“{0}”, num); 1八 } 1玖 } 20 } View Code

亚洲必赢官网 13

 

   下图突显了完整的查询操作。在 LINQ
中,查询的履行与查询本身截然不一致;换句话说,查询本身指的是只开创查询变量,不检索任何数据。

亚洲必赢官网 14

  

亚洲必赢官网 15

  1.2 数据源

  在上二个示范中,由于数据源是数组,因此它隐式帮忙泛型 IEnumerable<T> 接口。支持 IEnumerable<T> 或派生接口(如泛型 IQueryable<T>)的品类称为可查询类型。  

  可查询类型不须要开始展览修改或特殊处理就足以用作 LINQ
数据源。若是源数据还未有当做可查询类型出现在内部存款和储蓄器中,则 LINQ
提供程序必须以此方式意味着源数据。例如,LINQ to XML 将 XML
文书档案加载到可查询的 XElement 类型中:

  //从 XML 中创建数据源
  //using System.Xml.Linq;
  var contacts = XElement.Load(@"c:\xxx.xml");

  

  在 LINQ to SQL 中,首先需求成立对象关系映射。
针对那些指标编排查询,然后由 LINQ to SQL 在运作时处理与数据库的通讯。

亚洲必赢官网 16亚洲必赢官网 17

1     var  db = new Northwnd(@"c:\northwnd.mdf");
2     
3     //查询在伦敦的客户
4     var custQuery =
5         from cust in db.Customers
6         where cust.City == "London"
7         select cust;

Customers 代表数据库中的特定表

 

  1.2 数据源

  在上五个演示中,由于数据源是数组,由此它隐式支持泛型 IEnumerable<T> 接口。支持 IEnumerable<T> 或派生接口(如泛型 IQueryable<T>)的种类称为可查询类型。  

  可查询类型不供给展开改动或新鲜处理就能够用作 LINQ
数据源。即使源数据还未曾作为可查询类型出现在内部存款和储蓄器中,则 LINQ
提供程序必须以此情势意味着源数据。例如,LINQ to XML 将 XML
文书档案加载到可查询的 XElement 类型中:

  //从 XML 中创建数据源
  //using System.Xml.Linq;
  var contacts = XElement.Load(@"c:\xxx.xml");

  

  在 LINQ to SQL 中,首先供给创设对象关系映射。
针对那么些指标编排查询,然后由 LINQ to SQL 在运维时处理与数据库的通讯。

亚洲必赢官网 18亚洲必赢官网 19

1     var  db = new Northwnd(@"c:\northwnd.mdf");
2     
3     //查询在伦敦的客户
4     var custQuery =
5         from cust in db.Customers
6         where cust.City == "London"
7         select cust;

Customers 表示数据库中的特定表

 

  1.2 数据源

  在上3个示范中,由于数据源是数组,因而它隐式帮衬泛型 IEnumerable<T> 接口。帮忙 IEnumerable<T> 或派生接口(如泛型 IQueryable<T>)的花色称为可查询类型。
 

  可查询类型不需求举办修改或新鲜处理就足以用作 LINQ
数据源。即便源数据还不曾当做可查询类型现身在内部存款和储蓄器中,则 LINQ
提供程序必须以此方法表示源数据。例如,LINQ to XML 将 XML
文书档案加载到可查询的 XElement 类型中:

  //从 XML 中创建数据源
  //using System.Xml.Linq;
  var contacts = XElement.Load(@"c:\xxx.xml");

  

  在 LINQ to SQL 中,首先须求成立对象关系映射。
针对这个目的编排查询,然后由 LINQ to SQL 在运作时处理与数据库的通讯。

亚洲必赢官网 201 var db =
new Northwnd(@”c:\northwnd.mdf”); 2 三 //查询在London的客户 4 var
custQuery = 伍 from cust in db.Customers 6 where cust.City == “London” 七select cust; Customers 表示数据库中的特定表

 

 

  1.3 查询

  查询内定要从数据源中检索的音信。
查询还足以钦命在回来这一个音讯从前如何对其开始展览排序、分组和结构化。
查询存款和储蓄在询问变量中,并用查询表达式实行初阶化。

  在此以前的演示中的查询是从整数数组中回到全体的偶数。
该查询表明式包涵八个子句:fromwhere 和 select。(假诺你驾驭SQL,您会专注到那几个子句的依次与 SQL
中的顺序相反。)from 子句内定数据源,where 子句内定应用筛选器,select 子句内定再次回到的要素的档次。
方今亟待留意的是,在 LINQ 中,查询变量本人不执行别的操作并且不回去任何数据。
它只是存储在未来有个别时刻执行查询时为转变结果而须求的信息。

 

  1.3 查询

  查询钦赐要从数额源中检索的音讯。
查询仍可以钦赐在回去那几个新闻之前怎样对其展开排序、分组和结构化。
查询存款和储蓄在查询变量中,并用查询表达式举行开始化。

  从前的示范中的查询是从整数数组中回到全数的偶数。
该查询表明式包括多个子句:fromwhere 和 select。(借使你驾驭SQL,您会小心到这一个子句的1一与 SQL
中的顺序相反。)from 子句钦定数据源,where 子句钦赐应用筛选器,select 子句钦点重返的要素的连串。
最近急需小心的是,在 LINQ 中,查询变量本人不实施此外操作并且不回来任何数据。
它只是存款和储蓄在随后某些时刻执行查询时为变化结果而须求的音信。

 

  1.3 查询

  查询钦点要从数量源中检索的消息。
查询还足以内定在回到那些新闻在此之前如何对其举行排序、分组和结构化。
查询存款和储蓄在询问变量中,并用查询表达式进行开端化。

  以前的以身作则中的查询是从整数数组中回到全部的偶数。
该查询表明式包蕴多少个子句:fromwhere 和 select。(假使您纯熟SQL,您会注意到这个子句的顺序与 SQL
中的顺序相反。)from 子句钦赐数据源,where 子句钦点应用筛选器,select 子句内定重回的成分的类型。
近年来亟需专注的是,在 LINQ
中,查询变量本人不进行其它操作并且不回去任何数据。
它只是存款和储蓄在后来有些时刻执行查询时为转移结果而须要的音信。  

    • 赢得数据源

  一.肆 查询执行

  一.四 查询执行

  一.4 查询执行

     LINQ语句是在 foreach
语句中实践查询,而 foreach 须要利用 IEnumerable 或
IEnumerable<T>。帮助 IEnumerable<T> 或派生接口(如泛型
IQueryable<T>)的品类称为“可查询类型”。

  一.延缓执行

    如前所述,查询变量自身只是存款和储蓄查询命令。  实际的查询执行会延迟到在 foreach 语句中循环访问查询变量时发出。
此概念称为“延迟执行”。

  一.延缓执行

    如前所述,查询变量本人只是存款和储蓄查询命令。  实际的询问执行会延迟到在 foreach 语句中循环访问查询变量时发出。
此概念称为“延迟执行”。

  一.延缓执行

    如前所述,查询变量自身只是存款和储蓄查询命令。  实际的查询执行会延迟到在 foreach 语句中循环访问查询变量时发出。
此概念称为“延迟执行”。

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

  2.威逼马上实施

    对1密密麻麻源成分执行聚合函数的询问必须首先循环访问那么些因素。CountMaxAverage 和 First 就属于此类查询。由于查询自身必须使用 foreach 以便回到结果,因而那一个查询在实行时不使用显式 foreach 语句。其它还要小心,那一个类别的询问重返单个值,而不是 IEnumerable 集合。 

亚洲必赢官网 21亚洲必赢官网 22

1     var numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
2 
3     var evenNumQuery =
4         from num in numbers
5         where (num % 2) == 0
6         select num;
7 
8     var evenNumCount = evenNumQuery.Count();

View Code

亚洲必赢官网 23

 

  若要强制立刻施行任意查询并缓存其结果,可以调用 ToList<TSource> 或 ToArray<TSource> 方法。

亚洲必赢官网 24亚洲必赢官网 25

1     var numQuery2 =
2            (from num in numbers
3             where (num % 2) == 0
4             select num).ToList();
5 
6     var numQuery3 =
7           (from num in numbers
8            where (num % 2) == 0
9             select num).ToArray();

View Code

 

  其它,仍是可以透过在紧跟查询表达式之后的职务放置三个 foreach 循环来强制执行查询。可是,通过调用 ToList 或 ToArray,也能够将持有数据缓存在单个集合对象中。 

 

  二.强制马上执行

    对壹多元源成分执行聚合函数的询问必须首先循环访问这么些要素。CountMaxAverage 和 First 就属于此类查询。由于查询本身必须运用 foreach 以便回到结果,由此这几个查询在实施时不行使显式 早先使用。foreach 语句。其它还要小心,那几个项指标询问再次来到单个值,而不是 IEnumerable 集合。 

亚洲必赢官网 26亚洲必赢官网 27

1     var numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
2 
3     var evenNumQuery =
4         from num in numbers
5         where (num % 2) == 0
6         select num;
7 
8     var evenNumCount = evenNumQuery.Count();

View Code

亚洲必赢官网 28

 

  若要强制立时施行任意查询并缓存其结果,能够调用 ToList<TSource> 或 ToArray<TSource> 方法。

亚洲必赢官网 29亚洲必赢官网 30

1     var numQuery2 =
2            (from num in numbers
3             where (num % 2) == 0
4             select num).ToList();
5 
6     var numQuery3 =
7           (from num in numbers
8            where (num % 2) == 0
9             select num).ToArray();

View Code

 

  别的,仍是能够透过在紧跟查询表达式之后的岗位放置2个 foreach 循环来强制执行查询。不过,通过调用 ToList 或 ToArray,也得以将拥有数据缓存在单个集合对象中。 

 

  二.恐吓立即施行

    对一多级源成分执行聚合函数的询问必须首先循环访问那些要素。CountMaxAverage 和 First 就属于此类查询。由于查询本身必须利用 foreach 以便回到结果,由此那个查询在推行时不利用显式 foreach 语句。别的还要小心,那么些品种的询问再次来到单个值,而不是 IEnumerable 集合。 

亚洲必赢官网 311 var
numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; 2 3 var evenNumQuery = 4
from num in numbers 5 where (num % 2) == 0 6 select num; 7 8 var
evenNumCount = evenNumQuery.Count(); View Code

1 var numQuery2 = 2 (from num in numbers 3 where (num % 2) == 0 4 select
num).ToList(); 5 6 var numQuery3 = 7 (from num in numbers 8 where (num %
2) == 0 9 select num).ToArray(); View Code

 

  其余,还可以够透过在紧跟查询表明式之后的职责放置多个 foreach 循环来强制执行查询。可是,通过调用 ToList 或 ToArray,也得以将享有数据缓存在单个集合对象中。 

 

    • 始建查询

二、基本 LINQ 查询操作

2、基本 LINQ 查询操作

二、基本 LINQ 查询操作

     查询钦命要从数额源中检索的音讯。查询还是能内定在再次回到这一个音讯以前如何对其进展排序、分组和结构化。查询存款和储蓄在查询变量中,并用查询表明式进行伊始化。

  二.一 获取数据源:from

  在 LINQ
查询中,第二步是钦命数据源。像在超越58%编制程序语言中平等,必须先评释变量,才能采纳它。在
LINQ 查询中,起头使用 from 子句的目的是引进数据源和范围变量。

亚洲必赢官网 32亚洲必赢官网 33

1     //queryAllCustomers 是 IEnumerable<Cutsomer> 类型
2     //数据源 (customers) 和范围变量 (cust)
3     var queryAllCustomers = from cust in customers
4                                            select cust;

View Code

  范围变量类似于 foreach 循环中的迭代变量,但在查询表明式中,实际上不发出迭代。执行查询时,范围变量将用作对 customers 中的每一个后续成分的引用。因为编写翻译器能够想见 cust 的种类,所以您不用显式钦赐此类型。

 

  二.1 获取数据源:from

  在 LINQ
查询中,第三步是点名数据源。像在大部分编制程序语言中平等,必须先评释变量,才能选取它。在
LINQ 查询中,开端使用 from 子句的指标是引进数据源和界定变量。

亚洲必赢官网 34亚洲必赢官网 35

1     //queryAllCustomers 是 IEnumerable<Cutsomer> 类型
2     //数据源 (customers) 和范围变量 (cust)
3     var queryAllCustomers = from cust in customers
4                                            select cust;

View Code

  范围变量类似于 foreach 循环中的迭代变量,但在询问表明式中,实际上不发出迭代。执行查询时,范围变量将用作对 customers 中的每种后续成分的引用。因为编写翻译器能够预计 cust 的门类,所以你不用显式钦定此类型。

 

  二.1 获取数据源:from

  在 LINQ
查询中,第一步是钦命数据源。像在大部编制程序语言中平等,必须先注解变量,才能动用它。在
LINQ 查询中,起始使用 from 子句的目标是引进数据源和限制变量。

亚洲必赢官网 361
//queryAllCustomers 是 IEnumerable<Cutsomer> 类型 二 //数据源
(customers) 和限制变量 (cust) 3 var queryAllCustomers = from cust in
customers 肆 select cust; View
Code

  范围变量类似于 foreach 循环中的迭代变量,但在查询表明式中,实际上不发生迭代。执行查询时,范围变量将用作对 customers 中的各种后续成分的引用。因为编写翻译器能够推测 cust 的品类,所以你不用显式钦命此类型。

 

    • 施行查询
      • 延迟执行

  2.2 筛选:where

  大概最常用的询问操作是利用布尔表明式格局的筛选器。此筛选器使查询只回去那么些说明式结果为
true 的因素。使用 where 子句生成结果。实际上,筛选器钦命从源类别中排除哪些要素。

亚洲必赢官网 37亚洲必赢官网 38

1     var queryLondonCustomers = from cust in customers
2                                   where cust.City = "London"
3                                     select cust;

只回去地址位于London的 customers。

  您能够选择深谙的 C#
逻辑 AND(&&)和 OR(||) 运算符来依据要求在 where 子句中使用任意数量的筛选表明式。 

亚洲必赢官网 39亚洲必赢官网 40

where cust.City = "London" && cust.Name = "Devon"

若要只回去位于“London”和人名字为“Devon”的客户

亚洲必赢官网 41亚洲必赢官网 42

where cust.City = "London" || cust.Name = "Paris"

若要重回位于London或香水之都的客户

 

  2.2 筛选:where

  可能最常用的询问操作是行使布尔表达式方式的筛选器。此筛选器使查询只回去那二个表明式结果为
true 的因素。使用 where 子句生成结果。实际上,筛选器钦赐从源种类中革除哪些因素。

亚洲必赢官网 43亚洲必赢官网 44

1     var queryLondonCustomers = from cust in customers
2                                   where cust.City = "London"
3                                     select cust;

只回去地址位于London的 customers。

  您能够接纳深谙的 C#
逻辑 AND(&&)和 OR(||) 运算符来依据需求在 where 子句中选取任意数量的筛选表达式。 

亚洲必赢官网 45亚洲必赢官网 46

where cust.City = "London" && cust.Name = "Devon"

若要只回去位于“London”和姓名称为“Devon”的客户

亚洲必赢官网 47亚洲必赢官网 48

where cust.City = "London" || cust.Name = "Paris"

若要重回位于London或法国巴黎的客户

 

  2.2 筛选:where

  恐怕最常用的查询操作是使用布尔表明式情势的筛选器。此筛选器使查询只回去那三个表明式结果为
true
的成分。使用 where 子句生成结果。实际上,筛选器内定从源体系中清除哪些因素。

亚洲必赢官网 49一 var
queryLondonCustomers = from cust in customers 2        where
cust.City = “London” 叁       select cust; 只回去地址位于London的 customers。

  您能够运用深谙的 C#
逻辑 AND(&&)和 OR(||) 运算符来依照必要在 where 子句中应用任意数量的筛选表明式。 

亚洲必赢官网 50where
cust.City = “London” && cust.Name = “Devon” 若要只回去位于“London”和人名叫“Devon”的客户
亚洲必赢官网 51where
cust.City = “London” || cust.Name = “Paris” 若要回去位于London或法国首都的客户

 

   
 查询变量本人只是存款和储蓄查询命令。实际的询问执行会推迟到在 foreach
语句中循环访问查询变量时发生。此概念称为“延迟执行”

  2.3 排序:orderby

  常常能够很便宜地将赶回的数据开始展览排序。orderby 子句将使再次回到的队列中的成分依据被排序的项指标私下认可比较器进行排序。

亚洲必赢官网 52亚洲必赢官网 53

1     var queryLondonCustomers = from cust in customers
2                                where cust.City = "London"
3                                orderby cust.Name descending 
4                                select cust;

按 Name 属性对结果开展排序

  因为 Name 是3个字符串,所以暗中同意相比较器执行从 A 到 Z
的假名排序。若要按相反顺序(从 Z 到 A)对结果进行排序,请使用 orderby…descending 子句。

 

  2.3 排序:orderby

  平时能够很有益地将赶回的数目进行排序。orderby 子句将使重返的类别中的成分根据被排序的品类的私下认可相比器举行排序。

亚洲必赢官网 54亚洲必赢官网 55

1     var queryLondonCustomers = from cust in customers
2                                where cust.City = "London"
3                                orderby cust.Name descending 
4                                select cust;

按 Name 属性对结果实行排序

  因为 Name 是八个字符串,所以暗中同意相比器执行从 A 到 Z
的字母排序。若要按相反顺序(从 Z 到 A)对结果开始展览排序,请使用 orderby…descending 子句。

 

  2.3 排序:orderby

  常常能够很有益于地将回来的数码开始展览排序。orderby 子句将使重回的类别中的元素依据被排序的体系的默许相比器举行排序。

亚洲必赢官网 56一 var
queryLondonCustomers = from cust in customers 二 where cust.City =
“London” 叁 orderby cust.Name descending 四 select cust; 按 Name 属性对结果开始展览排序

  因为 Name 是一个字符串,所以私下认可相比较器执行从 A 到 Z
的假名排序。若要按相反顺序(从 Z 到 A)对结果开始展览排序,请使用 orderby…descending 子句。

 

foreach (int num in numQuery)
{
    Console.Write("{0,1} ", num);
}

  2.4 分组:group

  使用 group 子句,您能够按钦命的键分组结果。

亚洲必赢官网 57亚洲必赢官网 58

 1     var queryLondonCustomers = from cust in customers
 2                     group cust by cust.City;
 3 
 4     foreach (var queryLondonCustomer in queryLondonCustomers)
 5     {
 6        Console.WriteLine(queryLondonCustomer.Key);
 7        foreach (var cust in queryLondonCustomer)
 8        {
 9           Console.WriteLine(cust.Name);
10        }
11     }

你能够钦定结果应按 City
分组,以便位于London或法国首都的全体客户位于各自己组建中。

  在本例中,cust.City 是键。

  在使用 group 子句结束查询时,结果使用列表的列表形式。列表中的每种成分是三个负有 Key 成员及依据该键分组的要素列表的目的。在循环访问生成组连串的询问时,您必须运用嵌套的 foreach 循环。外部循环用于循环访问每一个组,内部循环用于循环访问各种组的分子。
 

  固然你必须引用组操作的结果,能够采用 into 关键字来创制可进一步查询的标识符。

亚洲必赢官网 59亚洲必赢官网 60

1     //custQuery 是 IEnumable<IGrouping<string, Customer>> 类型
2     var custQuery = from cust in customers
3                     group cust by cust.City
4                     into custGroup
5                     where custGroup.Count() > 2
6                     orderby custGroup.Key
7                     select custGroup;

那里的询问只回去那么些含有七个以上的客户的组。

 

  2.4 分组:group

  使用 group 子句,您能够按钦点的键分组结果。

亚洲必赢官网 61亚洲必赢官网 62

 1     var queryLondonCustomers = from cust in customers
 2                     group cust by cust.City;
 3 
 4     foreach (var queryLondonCustomer in queryLondonCustomers)
 5     {
 6        Console.WriteLine(queryLondonCustomer.Key);
 7        foreach (var cust in queryLondonCustomer)
 8        {
 9           Console.WriteLine(cust.Name);
10        }
11     }

你能够钦命结果应按 City
分组,以便位于London或法国巴黎的有所客户位于各自己组建中。

  在本例中,cust.City 是键。

  在使用 group 子句甘休查询时,结果运用列表的列表形式。列表中的每一个成分是3个富有 Key 成员及依据该键分组的成分列表的靶子。在循环访问生成组系列的查询时,您必须运用嵌套的 foreach 循环。外部循环用于循环访问每一个组,内部循环用于循环访问每一种组的积极分子。
 

  假若您必须引用组操作的结果,能够动用 into 关键字来创立可进一步询问的标识符。

亚洲必赢官网 63亚洲必赢官网 64

1     //custQuery 是 IEnumable<IGrouping<string, Customer>> 类型
2     var custQuery = from cust in customers
3                     group cust by cust.City
4                     into custGroup
5                     where custGroup.Count() > 2
6                     orderby custGroup.Key
7                     select custGroup;

那边的询问只回去那么些带有七个以上的客户的组。

 

  2.4 分组:group

  使用 group 子句,您能够按钦定的键分组结果。

亚洲必赢官网 65 一 var
queryLondonCustomers = from cust in customers 二 group cust by cust.City;
3 四 foreach (var queryLondonCustomer in queryLondonCustomers) 五 { 陆Console.WriteLine(queryLondonCustomer.Key); 柒 foreach (var cust in
queryLondonCustomer) 八 { 九 Console.WriteLine(cust.Name); 十 } 11 } 您能够钦定结果应按 City
分组,以便位于London或法国首都的持有客户位于各自己组建中。

  在本例中,cust.City 是键。

  在使用 group 子句截止查询时,结果运用列表的列表方式。列表中的各样成分是3个独具 Key 成员及基于该键分组的成分列表的靶子。在循环访问生成组体系的查询时,您必须使用嵌套的 foreach 循环。外部循环用于循环访问每种组,内部循环用于循环访问各个组的积极分子。
 

  假使你必须引用组操作的结果,能够选取 into 关键字来创制可进一步询问的标识符。

亚洲必赢官网 661
//custQuery 是 IEnumable<IGrouping<string, Customer>> 类型 二var custQuery = from cust in customers 叁 group cust by cust.City 四 into
custGroup 伍 where custGroup.Count() > 二 陆 orderby custGroup.Key 7select custGroup; 那里的询问只回去那二个富含七个以上的客户的组。

 

      • 强制立刻执行

  2.5 联接:join

  联接运算创立数量源中未有显式建立模型的行列之间的涉嫌。例如,您可以实施联接来寻找位于同一地方的有所客户和经销商。在
LINQ 中,join 子句始终对准对象集合而非直接针对数据库表运转。  

亚洲必赢官网 67亚洲必赢官网 68

1     var innerJoinQuery = from cust in customers
2                        join dist in distributors on cust.City equals dist.City
3                        select new {CustomerName = cust.Name, DistributorName = dist.Name};

诸如,您能够实施联接来查找位于同壹地址的享有客户和经销商。

  在 LINQ 中,join 子句始终本着对象集合而非直接针对数据库表运转。
 

  在 LINQ 中,您不用像在 SQL 中那么往往利用 join,因为 LINQ
中的外键在对象模型中代表为涵盖项集合的品质。

亚洲必赢官网 69亚洲必赢官网 70

    from order in Customer.Orders...

譬如说,Customer 对象涵盖 Order
对象的聚众。不必执行联接,只需使用点表示法访问订单。

  

  2.5 联接:join

  联接运算创建数量源中未有显式建立模型的行列之间的关联。例如,您能够执行联接来寻觅位于同一地方的享有客户和经销商。在
LINQ 中,join 子句始终本着对象集合而非直接针对数据库表运转。  

亚洲必赢官网 71亚洲必赢官网 72

1     var innerJoinQuery = from cust in customers
2                        join dist in distributors on cust.City equals dist.City
3                        select new {CustomerName = cust.Name, DistributorName = dist.Name};

诸如,您能够实施联接来探寻位于同一个人置的富有客户和经销商。

  在 LINQ 中,join 子句始终对准对象集合而非直接指向数据库表运营。
 

  在 LINQ 中,您不要像在 SQL 中那样往往利用 join,因为 LINQ
中的外键在目的模型中象征为含有项集合的天性。

亚洲必赢官网 73亚洲必赢官网 74

    from order in Customer.Orders...

比如,Customer 对象涵盖 Order
对象的聚众。不必执行联接,只需使用点表示法访问订单。

  

  2.5 联接:join

  联接运算创造数量源中未有显式建立模型的行列之间的涉嫌。例如,您能够实施联接来搜寻位于同壹地方的有所客户和经销商。在
LINQ 中,join 子句始终对准对象集合而非直接针对数据库表运转。  

亚洲必赢官网 75壹 var
innerJoinQuery = from cust in customers 2   join dist in distributors
on cust.City equals dist.City 三   select new {CustomerName =
cust.Name, DistributorName = dist.Name}; 例如,您可以推行联接来寻觅位于同一地点的具备客户和经销商。

  在 LINQ 中,join 子句始终本着对象集合而非直接针对数据库表运维。
 

  在 LINQ 中,您不要像在 SQL 中那么往往利用 join,因为 LINQ
中的外键在对象模型中象征为涵盖项集合的属性。

亚洲必赢官网 76 from order
in Customer.Orders… 例如,Customer
对象涵盖 Order
对象的聚集。不必执行联接,只需使用点表示法访问订单。

  

   
 对一名目繁多源成分执行聚合函数的询问必须首先循环访问那个因素。
Count、马克斯、Average 和 First 就属于此类查询。由于查询本身必须使用
foreach 以便回到结果,因而这一个查询在进行时不使用显式 foreach
语句。其它还要小心,那几个项目标询问重回单个值,而不是 IEnumerable
集合。

  2.6 选择(投影):select

  select 子句生成查询结果并点名种种再次来到的因素的“形状”或项目。

  例如,您能够内定结果包涵的是任何 Customer 对象、仅2个分子、成员的子集,照旧有个别基于计算或新目的创造的一心两样的结果类型。当 select 子句生成除源成分副本以外的始末时,该操作称为“投影”。

 

  2.6 选择(投影):select

  select 子句生成查询结果并点名每一种重临的因素的“形状”或项目。

  例如,您能够内定结果包涵的是任何 Customer 对象、仅三个成员、成员的子集,依旧某些基于总括或新目的创设的通通两样的结果类型。当 select 子句生成除源元素副本以外的剧情时,该操作称为“投影”。

 

  2.6 选择(投影):select

  select 子句生成查询结果并点名每一个重返的成分的“形状”或项目。

  例如,您能够钦赐结果包罗的是任何 Customer 对象、仅四个成员、成员的子集,照旧有个别基于总结或新指标成立的一心两样的结果类型。当 select 子句生成除源成分副本以外的内容时,该操作称为“投影”。

 

var evenNumQuery = 
    from num in numbers
    where (num % 2) == 0
    select num;
int evenNumCount = evenNumQuery.Count();

叁、使用 LINQ 实行数量转换

  语言集成查询 (LINQ)
不仅可用于检索数据,而且仍然二个功能强大的数据转换工具。通过行使 LINQ
查询,您能够将源系列用作输入,并动用二种措施修改它以创制新的出口连串。您能够通过排序和分组来修改该系列,而毋庸修改元素本身。不过,LINQ
查询的最精锐的作用是能够创造新类型。这一意义在 select 子句中贯彻。 例如,能够实施下列职务:  

  

三、使用 LINQ 进行多少转换

  语言集成查询 (LINQ)
不仅可用来检索数据,而且依然3个功用强大的多少转换工具。通过应用 LINQ
查询,您能够将源体系用作输入,并利用各种格局修改它以创建新的出口种类。您能够通过排序和分组来修改该种类,而毋庸修改成分本人。不过,LINQ
查询的最精锐的法力是能够创建新品类。那一效应在 select 子句中达成。 例如,能够实施下列任务:  

  

三、使用 LINQ 进行数量转换

  语言集成查询 (LINQ)
不仅可用于检索数据,而且仍旧3个作用强大的数额转换工具。通过行使 LINQ
查询,您能够将源种类用作输入,并动用多样方法修改它以创办新的出口体系。您能够因此排序和分组来修改该种类,而无需修改成分本人。但是,LINQ
查询的最强劲的功用是能够创制新品类。那一功力在 select 子句中落到实处。 例如,能够实施下列职分:  

  

   
 若要强制立刻施行任意查询并缓存其结果,能够调用 ToList<TSource> 或
ToArray<TSource> 方法。

  叁.壹 将多个输入联接到2个输出类别

亚洲必赢官网 77亚洲必赢官网 78

 1     class Student
 2     {
 3         public string Name { get; set; }
 4 
 5         public int Age { get; set; }
 6 
 7         public string City { get; set; }
 8 
 9         public List<int> Scores { get; set; }
10     }
11 
12     class Teacher
13     {
14         public int Id { get; set; }
15 
16         public string Name { get; set; }
17 
18         public int Age { get; set; }
19 
20         public string City { get; set; }
21 
22     }

学生和教师职员和工人五个类

亚洲必赢官网 79亚洲必赢官网 80

 1     internal class Program
 2     {
 3         private static void Main(string[] args)
 4         {
 5             //创建第一个数据源
 6             var students = new List<Student>()
 7             {
 8                 new Student()
 9                 {
10                     Age = 23,
11                     City = "广州",
12                     Name = "小C",
13                     Scores = new List<int>(){85,88,83,97}
14                 },
15                 new Student()
16                 {
17                     Age = 18,
18                     City = "广西",
19                     Name = "小明",
20                     Scores = new List<int>(){86,78,85,90}
21                 },
22                 new Student()
23                 {
24                     Age = 33,
25                     City = "梦里",
26                     Name = "小叁",
27                     Scores = new List<int>(){86,68,73,97}
28                 }
29             };
30 
31             //创建第二个数据源
32             var teachers = new List<Teacher>()
33             {
34                 new Teacher()
35                 {
36                     Age = 35,
37                     City = "梦里",
38                     Name = "啵哆"
39                 },
40                 new Teacher()
41                 {
42                     Age = 28,
43                     City = "云南",
44                     Name = "小红"
45                 },
46                 new Teacher()
47                 {
48                     Age = 38,
49                     City = "河南",
50                     Name = "丽丽"
51                 }
52             };
53 
54             //创建查询
55             var peopleInDreams = (from student in students
56                             where student.City == "梦里"
57                             select student.Name)
58                             .Concat(from teacher in teachers
59                                     where teacher.City == "梦里"
60                                     select teacher.Name);
61 
62             //执行查询
63             foreach (var person in peopleInDreams)
64             {
65                 Console.WriteLine(person);
66             }
67 
68             Console.Read();
69         }
70     }

支配台出口代码。   

 

  三.一 将多个输入联接到一个出口类别

亚洲必赢官网 81亚洲必赢官网 82

 1     class Student
 2     {
 3         public string Name { get; set; }
 4 
 5         public int Age { get; set; }
 6 
 7         public string City { get; set; }
 8 
 9         public List<int> Scores { get; set; }
10     }
11 
12     class Teacher
13     {
14         public int Id { get; set; }
15 
16         public string Name { get; set; }
17 
18         public int Age { get; set; }
19 
20         public string City { get; set; }
21 
22     }

学员和导师八个类

亚洲必赢官网 83亚洲必赢官网 84

 1     internal class Program
 2     {
 3         private static void Main(string[] args)
 4         {
 5             //创建第一个数据源
 6             var students = new List<Student>()
 7             {
 8                 new Student()
 9                 {
10                     Age = 23,
11                     City = "广州",
12                     Name = "小C",
13                     Scores = new List<int>(){85,88,83,97}
14                 },
15                 new Student()
16                 {
17                     Age = 18,
18                     City = "广西",
19                     Name = "小明",
20                     Scores = new List<int>(){86,78,85,90}
21                 },
22                 new Student()
23                 {
24                     Age = 33,
25                     City = "梦里",
26                     Name = "小叁",
27                     Scores = new List<int>(){86,68,73,97}
28                 }
29             };
30 
31             //创建第二个数据源
32             var teachers = new List<Teacher>()
33             {
34                 new Teacher()
35                 {
36                     Age = 35,
37                     City = "梦里",
38                     Name = "啵哆"
39                 },
40                 new Teacher()
41                 {
42                     Age = 28,
43                     City = "云南",
44                     Name = "小红"
45                 },
46                 new Teacher()
47                 {
48                     Age = 38,
49                     City = "河南",
50                     Name = "丽丽"
51                 }
52             };
53 
54             //创建查询
55             var peopleInDreams = (from student in students
56                             where student.City == "梦里"
57                             select student.Name)
58                             .Concat(from teacher in teachers
59                                     where teacher.City == "梦里"
60                                     select teacher.Name);
61 
62             //执行查询
63             foreach (var person in peopleInDreams)
64             {
65                 Console.WriteLine(person);
66             }
67 
68             Console.Read();
69         }
70     }

操纵台出口代码。   

 

  三.一 将多少个输入联接到1个出口系列

亚洲必赢官网 85 一 class
Student 贰 { 三 public string Name { get; set; } 4 5 public int Age { get;
set; } 陆 7 public string City { get; set; } 8 玖 public List<int>
Scores { get; set; } 10 } 11 1二 class Teacher 一三 { 1肆 public int Id {
get; set; } 1伍 1陆 public string Name { get; set; } 17 18 public int Age
{ get; set; } 1九 20 public string City { get; set; } 二一 2二 } 学生和老师多个类
亚洲必赢官网 86 1 internal
class Program 2 { 3 private static void Main(string[] args) 四 { 5
//创制第一个数据源 陆 var students = new List<Student>() 柒 { 八 new
Student() 玖 { 十 Age = 二3, 1一 City = “马尼拉”, 12 Name = “小C”, 1叁 Scores
= new List<int>(){8五,8八,八三,97} 14 }, 一五 new Student() 1陆 { 一7 Age
= 1八, 18 City = “湖南”, 1九 Name = “小明”, 20 Scores = new
List<int>(){86,7八,八伍,90} 2① }, 2二 new Student() 二三 { 贰四 Age = 33,
二5 City = “梦之中”, 26 Name = “小三”, 贰7 Scores = new
List<int>(){86,6八,73,97} 28 } 2九 }; 30 31 //创制第一个数据源 32var teachers = new List<Teacher>() 3三 { 3四 new Teacher() 35 { 3六Age = 35, 三七 City = “梦里”, 3⑧ Name = “啵哆” 3九 }, 40 new Teacher() 四一 {
42 Age = 2捌, 四三 City = “浙江”, 4四 Name = “小红” 45 }, 四陆 new Teacher()
四7 { 4捌 Age = 3捌, 4九 City = “四川”, 50 Name = “丽丽” 5壹 } 5二 }; 伍三 54
//创制查询 5⑤ var peopleInDreams = (from student in students 5六 where
student.City == “梦中” 五7 select student.Name) 5八 .Concat(from teacher
in teachers 5玖 where teacher.City == “梦中” 60 select teacher.Name); 61
62 //执行查询 陆3 foreach (var person in peopleInDreams) 6④ { 陆5Console.WriteLine(person); 6陆 } 陆七 6八 Console.Read(); 6九 } 70 } 控制台出口代码。

亚洲必赢官网 87

 

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

  三.二 选拔种种源元素的子集

  1. 若要只采纳源元素的1个分子,请使用点运算。

1     var query = from cust in Customers
2                     select cust.City;

  

  贰. 若要创设蕴涵源成分的八个属性的因素,能够应用具有命名对象或匿名类型的指标初步值设定项。

1     var query = from cust in Customer
2                    select new {Name = cust.Name, City = cust.City};

 

  三.贰 选用种种源成分的子集

  一. 若要只选择源成分的贰个分子,请使用点运算。

1     var query = from cust in Customers
2                     select cust.City;

  

  二. 若要创造包罗源成分的多个属性的要素,能够接纳具有命名对象或匿名类型的靶子发轫值设定项。

1     var query = from cust in Customer
2                    select new {Name = cust.Name, City = cust.City};

 

  3.二 选用各类源成分的子集

  壹. 若要只接纳源成分的一个分子,请使用点运算。

1     var query = from cust in Customers
2                     select cust.City;

  

  二. 若要创制蕴含源成分的多个属性的成分,能够行使全数命名对象或匿名类型的对象发轫值设定项。

1     var query = from cust in Customer
2                    select new {Name = cust.Name, City = cust.City};

 

  • 支持 LINQ 的功能
    • 查询表明式

  3.三 将内部存储器中的目的转换为 XML

亚洲必赢官网 88亚洲必赢官网 89

 1             //创建数据源
 2             var students = new List<Student>()
 3             {
 4                 new Student()
 5                 {
 6                     Age = 18,
 7                     Name = "小A",
 8                     Scores = new List<int>() {88,85,74,66 }
 9                 },
10                 new Student()
11                 {
12                     Age = 35,
13                     Name = "小B",
14                     Scores = new List<int>() {88,85,74,66 }
15                 },
16                 new Student()
17                 {
18                     Age = 28,
19                     Name = "小啥",
20                     Scores = new List<int>() {88,85,74,66 }
21                 }
22             };
23 
24             //创建查询
25             var studentsToXml = new XElement("Root",
26                 from student in students
27                 let x = $"{student.Scores[0]},{student.Scores[1]},{student.Scores[2]},{student.Scores[3]}"
28                 select new XElement("student",
29                 new XElement("Name", student.Name),
30                 new XElement("Age", student.Age),
31                 new XElement("Scores", x))
32             );
33 
34             //执行查询
35             Console.WriteLine(studentsToXml);

View Code

亚洲必赢官网 90

 

  3.三 将内部存储器中的目的转换为 XML

亚洲必赢官网 91亚洲必赢官网 92

 1             //创建数据源
 2             var students = new List<Student>()
 3             {
 4                 new Student()
 5                 {
 6                     Age = 18,
 7                     Name = "小A",
 8                     Scores = new List<int>() {88,85,74,66 }
 9                 },
10                 new Student()
11                 {
12                     Age = 35,
13                     Name = "小B",
14                     Scores = new List<int>() {88,85,74,66 }
15                 },
16                 new Student()
17                 {
18                     Age = 28,
19                     Name = "小啥",
20                     Scores = new List<int>() {88,85,74,66 }
21                 }
22             };
23 
24             //创建查询
25             var studentsToXml = new XElement("Root",
26                 from student in students
27                 let x = $"{student.Scores[0]},{student.Scores[1]},{student.Scores[2]},{student.Scores[3]}"
28                 select new XElement("student",
29                 new XElement("Name", student.Name),
30                 new XElement("Age", student.Age),
31                 new XElement("Scores", x))
32             );
33 
34             //执行查询
35             Console.WriteLine(studentsToXml);

View Code

亚洲必赢官网 93

 

  3.三 将内部存款和储蓄器中的对象转换为 XML

亚洲必赢官网 94 1
//创立数量源 二 var students = new List<Student>() 三 { 四 new
Student() 伍 { 6 Age = 18, 七 Name = “小A”, 8 Scores = new
List<int>() {8八,八5,7四,6陆 } 9 }, 10 new Student() 1一 { 12 Age = 35,
一三 Name = “小B”, 1肆 Scores = new List<int>() {8捌,八5,7四,6陆 } 壹伍 },
1六 new Student() 17 { 1八 Age = 28, 19 Name = “小吗”, 20 Scores = new
List<int>() {88,85,7四,6六 } 2一 } 2二 }; 23 2四 //创制查询 贰5 var
studentsToXml = new XElement(“Root”, 二陆 from student in students 二七 let
x =
$”{student.Scores[0]},{student.Scores[1]},{student.Scores[2]},{student.Scores[3]}”
2八 select new XElement(“student”, 2玖 new XElement(“Name”, student.Name),
30 new XElement(“Age”, student.Age), 3一 new XElement(“Scores”, x)) 32 );
3三 3四 //执行查询 3伍 Console.WriteLine(studentsToXml); View Code

亚洲必赢官网 95

 

     查询表明式使用类似于 SQL 或 XQuery
的注明性语法来询问 IEnumerable 集合。在编写翻译时,查询语法转换为对 LINQ
提供程序的规范查询运算符扩充方法实现的秘籍调用。应用程序通过使用 using
指令钦定适当的命名空间来支配范围内的科班查询运算符。上边包车型大巴查询表明式获取1个字符串数组,按字符串中的第3个字符对字符串进行分组,然后对各组进行排序。

  三.肆 对源成分执行操作

  输出种类也许不含有源种类的别的因素或因素属性。输出恐怕是因而将源成分用作输入参数总结出的值的种类。

亚洲必赢官网 96亚洲必赢官网 97

 1             //数据源
 2             double[] radii = {1, 2, 3};
 3 
 4             //创建查询
 5             var query = from radius in radii
 6                 select $"{radius * radius * 3.14}";
 7 
 8             //执行查询
 9             foreach (var i in query)
10             {
11                 Console.WriteLine(i);
12             }

View Code

亚洲必赢官网 98

   【备注】$”{radius
* radius * 3.14}” 相当于 string.Format(“{0}”,radius * radius *
三.1四),这里运用的是 C# 6.0 的语法。

 

  3.四 对源成分执行操作

  输出体系或然不包蕴源类别的其它因素或因素属性。输出或许是经过将源成分用作输入参数总括出的值的行列。

亚洲必赢官网 99亚洲必赢官网 100

 1             //数据源
 2             double[] radii = {1, 2, 3};
 3 
 4             //创建查询
 5             var query = from radius in radii
 6                 select $"{radius * radius * 3.14}";
 7 
 8             //执行查询
 9             foreach (var i in query)
10             {
11                 Console.WriteLine(i);
12             }

View Code

亚洲必赢官网 101

   【备注】$”{radius
* radius * 3.14}” 相当于 string.Format(“{0}”,radius * radius *
三.14),那里运用的是 C# 6.0 的语法。

 

  三.肆 对源元素执行操作

  输出连串恐怕不带有源种类的别的因素或因素属性。输出或许是因此将源元素用作输入参数计算出的值的行列。

亚洲必赢官网 102 1 //数据源
2 double[] radii = {一, 二, 3}; 叁 4 //创设查询 伍 var query = from radius
in radii 陆 select $”{radius * radius * 三.1四}”; 柒 8 //执行查询 九foreach (var i in query) 十 { 1一 Console.WriteLine(i); 1贰 } View Code

亚洲必赢官网 103

 

var query = from str in stringArray
            group str by str[0] into stringGroup
            orderby stringGroup.Key
            select stringGroup;

四、LINQ 查询操作的类型涉及

  LINQ
查询操作在数据源、查询本身及查询执行中是强类型的。查询中变量的花色必须与数据源1月素的档次和 foreach 语句中迭代变量的品类包容。强类型能够确定保证在编写翻译时捕获类型错误,以便及时改良。

 

肆、LINQ 查询操作的品种涉及

  LINQ
查询操作在数据源、查询自个儿及查询执行中是强类型的。查询中变量的体系必须与数据源10月素的连串和 foreach 语句中迭代变量的门类包容。强类型能够确定保证在编写翻译时捕获类型错误,以便及时考订。

 

四、LINQ 查询操作的档次涉及

  LINQ
查询操作在数据源、查询本身及查询执行中是强类型的。查询中变量的类型必须与数据源兰月素的门类和 foreach 语句中迭代变量的花色包容。此强类型保障在编写翻译时捕获类型错误,以便能够在用户遇到那一个错误从前修正它们。

 

    • 隐式类型化变量

  肆.1 不转换源数据的查询

  下图演示不对数据实施转换的 LINQ to Objects
查询操作。源包蕴3个字符串种类,查询输出也是2个字符串种类。 

亚洲必赢官网 104

  1数据源的品类参数决定限制变量的类型。

  贰抉择的对象的品种决定查询变量的花色。此处的 name 为3个字符串。由此,查询变量是两个 IEnumerable<字符串>。
 

  ③在 foreach 语句中循环访问查询变量。因为查询变量是二个字符串连串,所以迭代变量也是3个字符串。
 

 

  四.1 不转换源数据的查询

  下图演示不对数据实施转换的 LINQ to Objects
查询操作。源包蕴贰个字符串种类,查询输出也是2个字符串系列。 

亚洲必赢官网 105

  1数据源的门类参数决定限制变量的门类。

  2增选的指标的花色决定查询变量的档次。此处的 name 为三个字符串。因而,查询变量是多个 IEnumerable<字符串>。
 

  ③在 foreach 语句中循环访问查询变量。因为查询变量是三个字符串类别,所以迭代变量也是1个字符串。
 

 

  四.1 不转换源数据的询问

  下图演示不对数据进行转换的 LINQ to Objects
查询操作。源包罗一个字符串连串,查询输出也是3个字符串类别。 

亚洲必赢官网 106

  (1)数据源的项目参数决定限制变量的品种。

  (二)选择的对象的类别决定查询变量的连串。此处的 name 为多个字符串。由此,查询变量是三个 IEnumerable<字符串>。
 

  (3)在 foreach 语句中循环访问查询变量。因为查询变量是一个字符串类别,所以迭代变量也是三个字符串。
 

 

   
 不必在声明并初阶化变量时显式钦赐项目,您能够动用 var
修饰符来提醒编写翻译器测度并分配项目,注明为 var
的变量与显式钦点其类别的变量一样都以强类型。通过使用
var,能够创立匿名类型,但它可用于别的部分变量。也得以利用隐式类型申明数组。

  四.二 转换源数据的询问

  下图演示对数据实施简单转换的 LINQ to
SQL 查询操作。查询将三个 Customer 对象连串用作输入,并只选取结果中的 Name 属性。因为 Name 是3个字符串,所以查询生成七个字符串类别作为出口。  

亚洲必赢官网 107

  1数据源的品类参数决定限制变量的类型。

  ②select 语句重临 Name 属性,而非完整的 Customer 对象。因为 Name 是四个字符串,所以 custNameQuery 的花色参数是 string亚洲必赢官网 ,,而非Customer。
 

  3因为 custNameQuery 是2个字符串体系,所以 foreach 循环的迭代变量也务必是 string

 

  下图演示另一种转移。select 语句重临只捕获原始 Customer 对象的多个成员的匿名类型。

亚洲必赢官网 108

  1数据源的品类参数始终为查询中的范围变量的类型。

  贰因为 select 语句生成匿名类型,所以必须选拔 var 隐式类型化查询变量。

  三因为查询变量的种类是隐式的,所以 foreach 循环中的迭代变量也亟须是隐式的。

 

  4.二 转换源数据的询问

  下图演示对数码实施简单转换的 LINQ to
SQL 查询操作。查询将二个 Customer 对象系列用作输入,并只选择结果中的 Name 属性。因为 Name 是二个字符串,所以查询生成一个字符串种类作为出口。  

亚洲必赢官网 109

  一数据源的品种参数决定限制变量的花色。

  ②select 语句重临 Name 属性,而非完整的 Customer 对象。因为 Name 是三个字符串,所以 custNameQuery 的连串参数是 string,而非Customer。
 

  3因为 custNameQuery 是贰个字符串体系,所以 foreach 循环的迭代变量也务必是 string

 

  下图演示另壹种转移。select 语句重返只捕获原始 Customer 对象的五个分子的匿名类型。

亚洲必赢官网 110

  壹数据源的项目参数始终为查询中的范围变量的品种。

  二因为 select 语句生成匿名类型,所以必须利用 var 隐式类型化查询变量。

  3因为查询变量的门类是隐式的,所以 foreach 循环中的迭代变量也无法不是隐式的。

 

  四.2 转换源数据的查询

  下图演示对数码进行不难转换的 LINQ to
SQL 查询操作。查询将3个 Customer 对象类别用作输入,并只选择结果中的 Name 属性。因为 Name 是贰个字符串,所以查询生成一个字符串连串作为出口。  

亚洲必赢官网 111

  (一)数据源的类别参数决定限制变量的系列。

  (2)select 语句再次来到 Name 属性,而非完整的 Customer 对象。因为 Name 是二个字符串,所以 custNameQuery 的项目参数是 string,而非Customer。
 

  (三)因为 custNameQuery 是三个字符串类别,所以 foreach 循环的迭代变量也必须是 string

 

  下图演示另壹种转移。select 语句再次回到只捕获原始 Customer 对象的七个分子的匿名类型。

亚洲必赢官网 112

  (1)数据源的连串参数始终为查询中的范围变量的类别。

  (二)因为 select 语句生成匿名类型,所以必须采取 var 隐式类型化查询变量。

  (三)因为查询变量的档次是隐式的,所以 foreach 循环中的迭代变量也无法不是隐式的。

 

var number = 5;
var name = "Virginia";
var query = from str in stringArray
            where str[0] == 'm'
            select str;

  肆.叁 让编写翻译器猜测类型消息

  您也能够选拔首要字 var,可用以查询操作中的任何部分变量。不过,编译器为查询操作中的种种变量提供强类型。  

亚洲必赢官网 113

 

  四.3 让编写翻译器猜度类型音讯

  您也足以采纳首要字 var,可用以查询操作中的任何部分变量。可是,编写翻译器为查询操作中的各种变量提供强类型。  

亚洲必赢官网 114

 

  肆.三 让编写翻译器推测类型音信

  您也能够挑选让编写翻译器为您执行总体行事。关键字 var 可用于查询操作中的任何部分变量。可是,编写翻译器为查询操作中的各类变量提供强类型。  

亚洲必赢官网 115

 

    • 对象和集合开端值设定项

5、LINQ 中的查询语法和艺术语法

  大家编辑的 LINQ 查询语法,在编译代码时,CL讴歌ZDX会将查询语法转换为格局语法。这几个方法调用标准查询运算符的称呼类似 WhereSelectGroupByJoinMax和 Average,大家也是能够一向利用这几个措施语法的。
 

  查询语法和方英语斯拉维尼亚语义相同,但是,许多人手发现查询语法更简约、更便于阅读。有些查询必须代表为艺术调用。例如,必须使用方法调用表示检索成分的数据与钦赐的规格的查询。还非得选择格局必要摸索成分的最大值在源类别的查询。System.Linq 命名空间中的标准查询运算符的参阅文书档案日常选择办印度语印尼语法。

 

5、LINQ 中的查询语法和方乌克兰(Ukraine)语法

  咱们编辑的 LINQ 查询语法,在编译代码时,CLLX570会将查询语法转换为形式语法。那么些艺术调用标准查询运算符的名称类似 WhereSelectGroupByJoinMax和 Average,我们也是足以一向运用这么些点子语法的。
 

  查询语法和章程语塞尔维亚(Serbia)语义相同,但是,许四个人手发现查询语法更简便、更便于阅读。某个查询必须代表为艺术调用。例如,必须利用格局调用表示检索成分的多少与钦定的规格的查询。还非得运用办法供给摸索成分的最大值在源类别的查询。System.Linq 命名空间中的标准查询运算符的参考文书档案常常使用方爱尔兰语法。

 

5、LINQ 中的查询语法和措施语法

  在象征语言集成查询 (LINQ) 使用 LINQ
性查询语法,文书档案中的多数查询编写。可是,编译代码时,必须将查询语法转换为格局,那就需求.NET 公共语言运营时
(CLENVISION)。那一个方法调用标准查询运算符的称谓类似 WhereSelectGroupByJoinMax和 Average。能够调用这么些措施直接运用方匈牙利(Magyarország)语法而不是询问语法。
 

  查询语法和措施语波兰语义相同,可是,许6职员发现查询语法更简明、更便于阅读。有个别查询必须代表为形式调用。例如,必须接纳方法调用表示检索成分的数量与钦定的准绳的询问。还必须选取方式须要寻找成分的最大值在源体系的询问。System.Linq 命名空间中的标准查询运算符的参照文书档案平常接纳办保加多特Mond语法。

 

   
 通过对象和集合初阶值设定项,起首化对象时无需为目标显式调用构造函数。初始值设定项普通用在将源数据投影到新数据类型的查询表明式中。假定多少个类名称为Customer,具有公共 Name 和 Phone
属性,可以按下列代码中所示使用对象开头值设定项:

  5.一 标准查询运算符扩大方法

亚洲必赢官网 116亚洲必赢官网 117

 1         static void Main(string[] args)
 2         {
 3             var nums = new int[4] { 1, 2, 3, 4 };
 4             
 5             //创建查询表达式
 6             var qureyNums = from n in nums
 7                             where n % 2 == 0
 8                             orderby n descending
 9                             select n;
10 
11             Console.WriteLine("qureyNums:");
12             foreach (var n in qureyNums)
13             {
14                 Console.WriteLine(n);
15             }
16     
17             //使用方法进行查询
18             var queryNums2 = nums.Where(n => n % 2 == 0).OrderByDescending(n => n);
19 
20             Console.WriteLine("qureyNums2:");
21             foreach (var n in queryNums2)
22             {
23                 Console.WriteLine(n);
24             }
25 
26             Console.Read();
27         }

上面包车型地铁言传身教演示简单的询问表明式和编辑为依据方法的查询的语义上等效的查询。

亚洲必赢官网 118

  七个示范的出口是平等的。您能够看来三种样式的查询变量的品种是千篇一律的:IEnumerable<T>。
 

  若要通晓基于方法的询问,让我们越来越地解析它。注意,在表明式的右边,where 子句今后表示为对 numbers 对象的实例方法,在你再度调用该目的时其体系为 IEnumerable<int>。若是你熟谙泛型 IEnumerable<T> 接口,那么你就会掌握,它不具有 Where 方法。不过,若是你在
Visual Studio IDE 中调用 速龙liSense
完毕列表,那么您不只将看到 Where 方法,而且还会看出许多别的艺术,如 SelectSelectManyJoin 和Orderby。上面是有所专业查询运算符。 

亚洲必赢官网 119

  就算看起来 IEnumerable<T> 就如已被再度定义以囊括这个附加措施,但实则并非如此。那些标准查询运算符都以用作“扩充方法”完成的。

 

  伍.一 标准查询运算符扩张方法

亚洲必赢官网 120亚洲必赢官网 121

 1         static void Main(string[] args)
 2         {
 3             var nums = new int[4] { 1, 2, 3, 4 };
 4             
 5             //创建查询表达式
 6             var qureyNums = from n in nums
 7                             where n % 2 == 0
 8                             orderby n descending
 9                             select n;
10 
11             Console.WriteLine("qureyNums:");
12             foreach (var n in qureyNums)
13             {
14                 Console.WriteLine(n);
15             }
16     
17             //使用方法进行查询
18             var queryNums2 = nums.Where(n => n % 2 == 0).OrderByDescending(n => n);
19 
20             Console.WriteLine("qureyNums2:");
21             foreach (var n in queryNums2)
22             {
23                 Console.WriteLine(n);
24             }
25 
26             Console.Read();
27         }

上边包车型客车演示演示不难的询问表明式和编排为基于方法的查询的语义上等效的询问。

亚洲必赢官网 122

  多少个示范的输出是相同的。您能够看出三种格局的询问变量的连串是同样的:IEnumerable<T>。
 

  若要理解基于方法的查询,让大家特别地剖析它。注意,在表明式的左边,where 子句以后意味着为对 numbers 对象的实例方法,在您再也调用该目的时其体系为 IEnumerable<int>。如若你熟谙泛型 IEnumerable<T> 接口,那么您就会领悟,它不享有 Where 方法。可是,如若你在
Visual Studio IDE 中调用 英特尔liSense
完结列表,那么您不只将见到 Where 方法,而且还会看到众多其余方式,如 SelectSelectManyJoin 和Orderby。下边是享有专业查询运算符。 

亚洲必赢官网 123

  即使看起来 IEnumerable<T> 仿佛已被再度定义以囊括那么些附加措施,但实则并非如此。这一个专业查询运算符都以当做“扩充方法”达成的。

 

  伍.1 标准查询运算符增添方法

亚洲必赢官网 124 1 static
void Main(string[] args) 2 { 3 var nums = new int[4] { 壹, 二, 三, 四 };
4 伍 //创设查询表达式 六 var qureyNums = from n in nums 七 where n % 2 == 0
八 orderby n descending 玖 select n; 10 1一Console.WriteLine(“qureyNums:”); 12 foreach (var n in qureyNums) 壹三 { 14
Console.WriteLine(n); 1伍 } 1陆 1七 //使用方法开始展览查询 1八 var queryNums二 =
nums.Where(n => n % 2 == 0).OrderByDescending(n => n); 1九 20
Console.WriteLine(“qureyNums二:”); 二1 foreach (var n in queryNums二) 2贰 {
二叁 Console.WriteLine(n); 2四 } 25 2陆 Console.Read(); 二柒 } 上面的言传身教演示简单的查询表明式和编辑为依照方法的询问的语义上等效的查询。

亚洲必赢官网 125

  多少个示范的输出是如出1辙的。您能够看来两种方式的询问变量的项目是均等的:IEnumerable<T>。
 

  若要精晓基于方法的查询,让大家越发地分析它。注意,在表达式的左边,where 子句今后意味着为对 numbers 对象的实例方法,在你再度调用该目的时其种类为 IEnumerable<int>。借使你熟谙泛型 IEnumerable<T> 接口,那么您就会精晓,它不富有 Where 方法。不过,若是您在
Visual Studio IDE 中调用 AMDliSense
完毕列表,那么你不仅将见到 Where 方法,而且还会看出不少别的艺术,如 SelectSelectManyJoin 和Orderby。下边是颇具标准查询运算符。 

亚洲必赢官网 126

  纵然看起来 IEnumerable<T> 就像已被另行定义以囊括那么些附加措施,但实际并非如此。这几个标准查询运算符都以作为“增加方法”达成的。

 

Customer cust = new Customer { Name = "Mike", Phone = "555-1212" };

  5.2 Lambda 表达式

  在前方的示范中,布告该标准发挥式 (num % 2 == 0) 是作为内联参数。Where 方法:Where(num
=> num % 二 == 0) 此内联表明式称为 lambda
表明式。将代码编写为匿名格局或泛型委托或表明式树是一种便利的点子,不然编写起来就要麻烦得多。=> 是
lambda 运算符,可读为“goes
to”。运算符左边的 num 是输入变量,与查询表明式中的 num 相对应。编写翻译器可预计 num 的档次,因为它掌握 numbers 是泛型 IEnumerable<T> 类型。lambda
表明式与查询语法中的表明式或其余别的 C#
表达式或语句中的表明式相同;它能够包蕴方法调用和其它复杂逻辑。“再次回到值”正是表明式结果。
 

 

  5.2 Lambda 表达式

  在后边的言传身教中,文告该规范发挥式 (num % 2 == 0) 是作为内联参数。Where 方法:Where(num
=> num % 二 == 0) 此内联表达式称为 lambda
表达式。将代码编写为匿名方式或泛型委托或表明式树是壹种便利的措施,不然编写起来就要麻烦得多。=> 是
lambda 运算符,可读为“goes
to”。运算符右边的 num 是输入变量,与查询表明式中的 num 相对应。编写翻译器可估量 num 的花色,因为它掌握 numbers 是泛型 IEnumerable<T> 类型。lambda
表明式与查询语法中的说明式或任何别的 C#
表明式或语句中的表明式相同;它能够总结方法调用和任何复杂逻辑。“再次来到值”就是说明式结果。
 

 

  5.2 Lambda 表达式

  在前面包车型客车以身作则中,公告该条件发挥式 (num % 二 == 0)
是作为内联参数。Where 方法:Where(num => num % 二 == 0)
此内联表明式称为 lambda
表达式。将代码编写为匿名格局或泛型委托或表明式树是1种方便人民群众的法子,否则编写起来就要麻烦得多。=> 是
lambda 运算符,可读为“goes
to”。运算符左边的 num 是输入变量,与查询表明式中的 num 相对应。编译器可推测 num 的花色,因为它了然 numbers 是泛型 IEnumerable<T> 类型。lambda
表明式与查询语法中的表明式或其余别的 C#
表明式或语句中的表明式相同;它可以包蕴方法调用和其余复杂逻辑。“重回值”正是表达式结果。
 

 

    • 匿名类型

  5.叁 查询的组合性

  在地点的代码示例中,请留心 OrderBy 方法是因而在对 Where 的调用中央银行使点运算符来调用的。Where 生成筛选类别,然后 Orderby 通过对该类别排序来对它进行操作。因为查询会再次回到 IEnumerable,所以您可通过将艺术调用链接在联合,在章程语法大校这一个查询组合起来。那便是在你通过利用查询语法编写查询时编写翻译器在后台所实施的操作。并且由于查询变量不存款和储蓄查询的结果,因而你能够每一天修改它或将它用作新查询的基础,尽管在履行它后。

 

  5.3 查询的组合性

  在上头的代码示例中,请留心 OrderBy 方法是经过在对 Where 的调用中选取点运算符来调用的。Where 生成筛选种类,然后 Orderby 通过对该体系排序来对它举行操作。因为查询会再次来到 IEnumerable,所以你可透过将艺术调用链接在1起,在艺术语法少将这么些查询组合起来。那正是在你通过行使查询语法编写查询时编写翻译器在后台所执行的操作。并且由于查询变量不存款和储蓄查询的结果,由此你能够随时修改它或将它用作新查询的底蕴,就算在实践它后。

 

  五.三 查询的组合性

  在上头的代码示例中,请小心 OrderBy 方法是通过在对 Where 的调用中利用点运算符来调用的。Where 生成筛选种类,然后 Orderby 通过对该系列排序来对它实行操作。因为查询会重返 IEnumerable,所以你可经过将艺术调用链接在联合署名,在方式语法中校这几个查询组合起来。这就是在您通过选用查询语法编写查询时编写翻译器在后台所实行的操作。并且鉴于查询变量不存款和储蓄查询的结果,由此你能够随时修改它或将它用作新查询的底子,就算在推行它后。

 

本文首联:

 

–待整理形成后再次发布到首页–

  

] 开端接纳 LINQ, 开始运用 LINQ
以前曾刊登过三篇关于 LINQ 的小说: 进阶:《LINQ 标准查询操作概述》
(强烈推荐) 技巧:《Linq…

   
 匿名类型由编译器营造,且项目名称只可用以编写翻译器。匿名类型提供了壹种在查询结果中一时分组1组属性的福利方法,无需定义单独的命名类型。使用新的表明式和指标初阶值设定项伊始化匿名类型。

传送门

  入门:《走进 LINQ
的世界》

  进阶:《LINQ
标准查询操作概述》(强烈推荐)

  技巧:《Linq To Objects –
怎么样操作字符串》 和
《Linq To Objects –
怎么样操作文件目录》

 

 


本文首联:

【参考】

【来源】本文引用部分微软官方文书档案的图纸

 

 

  

传送门

  入门:《走进 LINQ
的世界》

  进阶:《LINQ
标准查询操作概述》(强烈推荐)

  技巧:《Linq To Objects –
怎么样操作字符串》 和
《Linq To Objects –
怎么着操作文件目录》

 

 


正文首联:

【参考】

【来源】本文引用部分微软官方文书档案的图样

 

 

  

select new {name = cust.Name, phone = cust.Phone};
    • 推而广之方法

   
 扩大方法是一种可与品种涉及的静态方法,因而得以像实例方法那样对品种调用它。实际上,此功能使你能够将新点子“添加”到现有项目,而不会实际修改它们。标准查询运算符是一组扩大方法,它们为促成
IEnumerable<T> 的其它项目提供 LINQ 查询作用。

    • Lambda 表达式

     拉姆da
表明式是一种内联函数,该函数使用 =>
运算符将输入参数与函数体分离,并且能够在编写翻译时转换为委托或公布式树。在
LINQ 编制程序中,在你对专业查询运算符实行直接格局调用时,会赶上 lambda
表明式。

    • 电动达成的脾性

     通过活动完结的习性,能够更分明地宣称属性。当您如下边包车型地铁示范中所示评释属性时,编写翻译器将创建一个私家的匿名帮助字段,该字段只好通过品质getter 和 setter 举行访问。

public string Name {get; set;}
  • LINQ 泛型
    •  IEnumerable<T> 变量

     LINQ 查询变量类型化为
IEnumerable<T> 或派生类型,如
IQueryable<T>。当你收看类型化为 IEnumerable<Customer>
的询问变量时,那只表示在进行该查询时,该查询将转变包罗零个或四个Customer 对象的队列。

IEnumerable<Customer> customerQuery =
    from cust in customers
    where cust.City == "London"
    select cust;
foreach (Customer customer in customerQuery)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}
    • 编译器处理泛型类型注脚

     就算您愿意,能够使用 var
关键字来制止接纳泛型语法。 var 关键字提醒编写翻译器通过翻看在 from
子句中钦命的数目源来估计查询变量的体系。当变量的体系明显或显式钦命嵌套泛型类型(如由组查询生成的那一个类型)并不主要时,var
关键字很有用。常常,大家提出1旦你使用
var,应意识到那也许使您的代码更难以令人家领会。

var customerQuery2 = 
    from cust in customers
    where cust.City == "London"
    select cust;
foreach(var customer in customerQuery2)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}
  • LINQ to Objects

     术语“LINQ to Objects”是指直接对任意
IEnumerable 或 IEnumerable<T> 集合使用 LINQ 查询,无需使用当中LINQ 提供程序或 API,如 LINQ to SQL 或 LINQ to XML。 能够应用 LINQ
来询问任何可枚举的联谊,如 List<T>、Array 或 Dictionary<TKey,
TValue>。 该集合能够是用户定义的成团,也足以是 .NET Framework API
重回的集纳。

     从根本上说,LINQ to Objects
表示1种新的拍卖集合的秘籍。
接纳旧办法,您必须编写制定钦命怎样从集合检索数据的纷繁的 foreach 循环。
而使用 LINQ 方法,您只需编写描述要寻找的内容的注脚性代码。

     其它,与价值观的 foreach
循环相比,LINQ 查询全体3大优势:

    • 它们更明了、更易读,特别在筛选八个规范时。
    • 它们选用最少的应用程序代码提供强大的筛选、排序和分组作用。
    • 无需修改或只需做相当的小的修改即可将它们移植到其余数据源。
网站地图xml地图