威尼斯人线上娱乐

【威尼斯人线上娱乐】起来利用

6 4月 , 2019  

走进 LINQ 的世界

走进 LINQ 的世界

[C#] 起头运用 LINQ,

 

  在此以前曾刊登过3篇有关 LINQ 的小说:

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

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

  今后,自个儿打算再整治1篇关于 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组功能,它在对象领域和数量领域之间架起了1座大桥。可为
C# 和 Visual Basic 语言语法提供有力的查询功用。 LINQ
引进了标准、易学的数额查询和更新形式,该技术能够增加为大约援助任何项指标多寡存款和储蓄。Visual
Studio 包罗 LINQ 提供程序的程序集,借助那几个程序集,就能将 LINQ 用于 .NET
Framework 集合、SQL Server 数据库、ADO.NET 数据集和 XML 文书档案。

LINQ 简介

  语言集成查询 (LINQ) 是 Visual Studio 200玖 和 .NET Framework 3.5版中引进的壹项立异功效。

  古板上,针对数据的询问都以以不难的字符串表示,而从不编写翻译时类型检查或
AMDliSense
帮助。其余,您还非得针对以下各样数据源学习一种区别的查询语言:SQL
数据库、XML 文书档案、各类 Web 服务等等。 通过LINQ,
您能够利用语言关键字和熟练的演算符针对强类型化对象集合编写查询。

威尼斯人线上娱乐 2

  

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

  使用要求:项目 ≥ .NET Framework 3.5 。

 

LINQ 简介

  语言集成查询 (LINQ) 是 Visual Studio 2010 和 .NET Framework 叁.伍版中引进的1项革新功效。

  守旧上,针对数据的查询都是以简要的字符串表示,而尚未编写翻译时类型检查或
速龙liSense
帮衬。其它,您还非得针对以下各个数据源学习1种差别的查询语言:SQL
数据库、XML 文书档案、各个 Web 服务等等。 通过LINQ,
您能够动用语言关键字和熟识的演算符针对强类型化对象集合编写查询。

威尼斯人线上娱乐 3

  

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

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

 

目录

  • 介绍 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 查询中,始终会用到目的。能够运用同1的编码方式来查询和更换 XML
文书档案、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ
提供程序可用的任何别的格式的数额。  

     查询是1种从数据源检索数据的表达式。
查询普通用专门的询问语言来表示。
随着时间的推迟,人们曾经为种种数据源开发了差别的言语;例如,用于关周密据库的
SQL 和用于 XML 的 XQuery。
因此,开发人士不得不针对他们不可能不帮衬的每个数据源或数量格式而读书新的查询语言。
LINQ
通过提供一种跨各个数据源和数量格式使用数据的等同模型,简化了这一气象。
在 LINQ 查询中,始终会用到对象。 可以运用同1的为主要编辑码方式来询问和更换
XML 文书档案、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ
提供程序可用的任何其余格式的数量。

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

  操作三部曲:壹取多少源 2创建查询 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

  

  壹.一 查询操作的五个部分

  操作3部曲:一取多少源 2创制查询 叁执行查询

威尼斯人线上娱乐 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

  

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

  操作三部曲:壹取多少源 2创立查询 叁实施查询

威尼斯人线上娱乐 12 1 internal
class Program 2 { 3 private static void Main(string[] args) 四 { 5
//壹.获取数据源 6 var nums = new int[7] { 0, 1, 二, 三, 四, 5, 6 }; 柒 8
//二.创制查询 九 var numQuery = 十 from num in nums 11 where (num % 二) ==
0 1二 select num; 壹三 1四 //三.执行查询 一伍 foreach (var num in numQuery) 16{ 一7 Console.WriteLine(“{0}”, num); 18 } 19 } 20 } View Code

威尼斯人线上娱乐 13

 

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

威尼斯人线上娱乐 14

  

威尼斯人线上娱乐 15

  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 在运营时处理与数据库的通讯。

威尼斯人线上娱乐 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 数据源

  在上1个演示中,由于数据源是数组,因而它隐式援救泛型 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”); 二 三 //查询在London的客户 四 var
custQuery = 5 from cust in db.Customers 六 where cust.City == “London” 7select cust; Customers 表示数据库中的特定表

 

 

  1.3 查询

  查询钦定要从数据源中检索的音讯。
查询还足以钦点在回来这个新闻在此以前怎么样对其开始展览排序、分组和结构化。
查询存款和储蓄在询问变量中,并用查询表达式举办伊始化。

  此前的演示中的查询是从整数数组中回到全体的偶数。
该查询表明式包涵八个子句:fromwhere 和 select。(如若你纯熟SQL,您会专注到那么些子句的次第与 SQL
中的顺序相反。)from 子句钦赐数据源,where 子句钦定应用筛选器,select 子句钦赐再次回到的成分的品类。
近来亟待留意的是,在 LINQ 中,查询变量本人不执行此外操作并且不回去任何数据。
它只是存款和储蓄在后来有个别时刻执行查询时为浮动结果而须求的消息。

 

  1.3 查询

  查询内定要从数额源中检索的消息。
查询仍是能够钦赐在回到这个音信在此之前如何对其进行排序、分组和结构化。
查询存储在询问变量中,并用查询表明式实行伊始化。

  在此以前的以身作则中的查询是从整数数组中回到全部的偶数。
该查询表达式包蕴多少个子句:fromwhere 和 select。(如若您熟习SQL,您会专注到那几个子句的各类与 SQL
中的顺序相反。)from 子句内定数据源,where【威尼斯人线上娱乐】起来利用。 子句内定应用筛选器,select 子句钦点重回的要素的项目。
近年来亟待专注的是,在 LINQ 中,查询变量本人不进行别的操作并且不回去任何数据。
它只是存款和储蓄在其后有个别时刻执行查询时为转变结果而须要的新闻。

 

  1.3 查询

  查询钦命要从数额源中检索的音讯。
查询仍是能够内定在回来这个消息此前怎么着对其进展排序、分组和结构化。
查询存款和储蓄在查询变量中,并用查询表明式实行初阶化。

  在此之前的言传身教中的查询是从整数数组中回到全部的偶数。
该查询表明式包蕴四个子句:fromwhere 和 select。(假若您熟稔SQL,您会小心到那一个子句的逐1与 SQL
中的顺序相反。)from 子句内定数据源,where 子句内定应用筛选器,select 子句钦点再次回到的要素的花色。
近期亟待留意的是,在 LINQ
中,查询变量本人不执行其余操作并且不回来任何数据。
它只是存款和储蓄在之后有个别时刻执行查询时为转变结果而要求的音信。  

    • 收获数据源

  一.四 查询执行

  1.肆 查询执行

  一.四 查询执行

     LINQ语句是在 foreach
语句中施行查询,而 foreach 供给运用 IEnumerable 或
IEnumerable<T>。支持 IEnumerable<T> 或派生接口(如泛型
IQueryable<T>)的花色称为“可查询类型”。

  ①.延迟执行

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

  一.延迟执行

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

  1.延迟执行

    如前所述,查询变量本人只是存款和储蓄查询命令。  实际的询问执行会延迟到在 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,也足以将享有数据缓存在单个集合对象中。 

 

  二.吓唬立刻实施

    对一俯10皆是源成分执行聚合函数的询问必须首先循环访问这几个因素。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

 

  其它,还是能经过在紧跟查询表达式之后的地方放置二个 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,也足以将全部数据缓存在单个集合对象中。 

 

    • 创设查询

2、基本 LINQ 查询操作

二、基本 LINQ 查询操作

二、基本 LINQ 查询操作

     查询钦点要从数据源中检索的音信。查询仍是可以够内定在再次来到这个音讯在此之前怎么着对其进展排序、分组和结构化。查询存款和储蓄在查询变量中,并用查询表明式举行开始化。

  2.一 获取数据源:from

  在 LINQ
查询中,第3步是内定数据源。像在大多数编制程序语言中千篇1律,必须先注脚变量,才能使用它。在
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
查询中,第三步是点名数据源。像在大部编制程序语言中千篇1律,必须先注明变量,才能使用它。在
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 的品类,所以你不要显式内定此类型。

 

  二.一 获取数据源:from

  在 LINQ
查询中,第二步是钦点数据源。像在大部编制程序语言中千篇一律,必须先证明变量,才能使用它。在
LINQ 查询中,开始使用 from 子句的指标是引进数据源和限制变量。

威尼斯人线上娱乐 361
//queryAllCustomers 是 IEnumerable<Cutsomer> 类型 二 //数据源
(customers) 和限制变量 (cust) 叁 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;

只回去地址位于伦敦的 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
query伦敦Customers = from cust in customers 二        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 是叁个字符串,所以暗中认可相比器执行从 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 是1个字符串,所以暗许相比器执行从 A 到 Z
的假名排序。若要按相反顺序(从 Z 到 A)对结果实行排序,请使用 orderby…descending 子句。

 

  2.3 排序:orderby

  平时可以很便宜地将赶回的多少举办排序。orderby 子句将使再次来到的队列中的成分依照被排序的档次的默许比较器实行排序。

威尼斯人线上娱乐 561 var
queryLondonCustomers = from cust in customers 贰 where cust.City =
“伦敦” 三 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 子句结束查询时,结果使用列表的列表情势。列表中的每种成分是一个有所 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 1 var
queryLondonCustomers = from cust in customers 二 group cust by cust.City;
叁 四 foreach (var queryLondonCustomer in queryLondonCustomers) 伍 { 6Console.WriteLine(queryLondonCustomer.Key); 7 foreach (var cust in
queryLondonCustomer) 八 { 九 Console.WriteLine(cust.Name); 十 } 1壹 } 您可以钦赐结果应按 City
分组,以便位于London或巴黎的全体客户位于各自己组建中。

  在本例中,cust.City 是键。

  在使用 group 子句甘休查询时,结果使用列表的列表情势。列表中的每种成分是二个兼有 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() > 二 6 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};

譬如说,您能够实施联接来寻觅位于同1地方的拥有客户和经销商。

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

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

威尼斯人线上娱乐 69威尼斯人线上娱乐 70

    from order in Customer.Orders...

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

  

  2.5 联接:join

  联接运算成立数量源中未有显式建立模型的队列之间的涉及。例如,您可以进行联接来搜寻位于同1地点的有着客户和经销商。在
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};

比如说,您能够实行联接来寻找位于同1地点的具备客户和经销商。

  在 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}; 例如,您能够进行联接来搜寻位于同1地址的保有客户和经销商。

  在 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 对象、仅多个成员、成员的子集,依旧有些基于总结或新目的成立的一心两样的结果类型。当 select 子句生成除源成分副本以外的剧情时,该操作称为“投影”。

 

  2.6 选择(投影):select

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

  例如,您能够钦赐结果包括的是漫天 Customer 对象、仅2个分子、成员的子集,照旧有个别基于总括或新对象成立的一点一滴两样的结果类型。当 select 子句生成除源元素副本以外的始末时,该操作称为“投影”。

 

  2.6 选择(投影):select

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

  例如,您能够钦命结果包括的是全方位 Customer 对象、仅七个成员、成员的子集,照旧有个别基于计算或新目的创造的通通两样的结果类型。当 select 子句生成除源成分副本以外的剧情时,该操作称为“投影”。

 

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

3、使用 LINQ 举行多少转换

  语言集成查询 (LINQ)
不仅可用以检索数据,而且如故贰个作用强大的数码转换工具。通过运用 LINQ
查询,您能够将源类别用作输入,并动用两种主意修改它以创制新的出口类别。您能够由此排序和分组来修改该体系,而无需修改元素自身。不过,LINQ
查询的最强劲的效果是力所能及创设新品类。那一成效在 select 子句中贯彻。 例如,能够实施下列任务:  

  

3、使用 LINQ 进行多少转换

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

  

3、使用 LINQ 进行多少转换

  语言集成查询 (LINQ)
不仅可用来检索数据,而且依然三个功效强大的数目转换工具。通过行使 LINQ
查询,您能够将源体系用作输入,并选取各类办法修改它以创办新的输出连串。您能够通过排序和分组来修改该连串,而毋庸修改成分自己。可是,LINQ
查询的最精锐的成效是力所能及创立新类型。那1作用在 select 子句中完结。 例如,能够举行下列任务:  

  

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

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

威尼斯人线上娱乐 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     }

操纵台出口代码。   

 

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

威尼斯人线上娱乐 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     }

决定台出口代码。   

 

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

威尼斯人线上娱乐 85 一 class
Student 二 { 三 public string Name { get; set; } 肆 5 public int Age { get;
set; } 陆 七 public string City { get; set; } 8 九 public List<int>
Scores { get; set; } 10 } 1壹 1二 class Teacher 1三 { 14 public int Id {
get; set; } 一伍 1陆 public string Name { get; set; } 一7 1八 public int Age
{ get; set; } 1九 20 public string City { get; set; } 二1 22 } 学生和教育者八个类
威尼斯人线上娱乐 86 1 internal
class Program 2 { 3 private static void Main(string[] args) 4 { 5
//成立第3个数据源 6 var students = new List<Student>() 七 { 8 new
Student() 玖 { 拾 Age = 贰叁, 11 City = “巴塞罗那”, 12 Name = “小C”, 壹三 Scores
= new List<int>(){八伍,8八,八叁,玖柒} 1四 }, 1五 new Student() 1陆 { 一七 Age
= 1八, 18 City = “山东”, 1九 Name = “小明”, 20 Scores = new
List<int>(){捌陆,7八,8伍,90} 2一 }, 2二 new Student() 二三 { 贰四 Age = 33,
二伍 City = “梦里”, 二陆 Name = “小三”, 二七 Scores = new
List<int>(){8陆,6八,7三,九7} 2八 } 2玖 }; 30 31 //创制首个数据源 32var teachers = new List<Teacher>() 33 { 3四 new Teacher() 3伍 { 36Age = 3五, 叁7 City = “梦中”, 38 Name = “啵哆” 3玖 }, 40 new Teacher() 肆一 {
4二 Age = 2八, 肆三 City = “江苏”, 44 Name = “小红” 45 }, 4陆 new Teacher()
4柒 { 4捌 Age = 3捌, 4玖 City = “江苏”, 50 Name = “丽丽” 5壹 } 5贰 }; 5三 54
//创造查询 5五 var peopleInDreams = (from student in students 5陆 where
student.City == “梦之中” 五七 select student.Name) 5捌 .Concat(from teacher
in teachers 5九 where teacher.City == “梦之中” 60 select teacher.Name); 61
6二 //执行查询 6三 foreach (var person in peopleInDreams) 64 { 65Console.WriteLine(person); 6陆 } 陆七 6捌 Console.Read(); 6玖 } 70 } 控制台出口代码。

威尼斯人线上娱乐 87

 

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

  3.二 采用各样源成分的子集

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

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

  

  2. 若要创制包罗源成分的三个属性的要素,能够行使全体命名对象或匿名类型的靶子伊始值设定项。

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

 

  3.二 采取各种源成分的子集

  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};

 

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

  一. 若要只选用源成分的2个成员,请使用点运算。

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

 

  三.三 将内存中的对象转换为 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

 

  三.三 将内部存款和储蓄器中的靶子转换为 XML

威尼斯人线上娱乐 94 1
//创造数量源 2 var students = new List<Student>() 三 { 四 new
Student() 伍 { 陆 Age = 1捌, 7 Name = “小A”, 八 Scores = new
List<int>() {88,85,74,6六 } 九 }, 10 new Student() 1一 { 12 Age = 3五,
一3 Name = “小B”, 1肆 Scores = new List<int>() {88,八5,74,6陆 } 一5 },
1陆 new Student() 一7 { 1八 Age = 2八, 1玖 Name = “小吗”, 20 Scores = new
List<int>() {8八,85,7肆,6陆 } 2一 } 2二 }; 2三 贰肆 //创立查询 25 var
studentsToXml = new XElement(“Root”, 二6 from student in students 27 let
x =
$”{student.Scores[0]},{student.Scores[1]},{student.Scores[2]},{student.Scores[3]}”
2八 select new XElement(“student”, 29 new XElement(“Name”, student.Name),
30 new XElement(“Age”, student.Age), 3一 new XElement(“Scores”, x)) 32 );
3三 34 //执行查询 3伍 Console.WriteLine(studentsToXml); View Code

威尼斯人线上娱乐 95

 

     查询表达式使用类似于 SQL 或 XQuery
的注脚性语法来询问 IEnumerable 集合。在编写翻译时,查询语法转换为对 LINQ
提供程序的专业查询运算符扩大方法达成的措施调用。应用程序通过动用 using
指令钦定适当的命名空间来支配范围内的正规化查询运算符。上面包车型客车查询表达式获取2个字符串数组,按字符串中的第壹个字符对字符串举办分组,然后对各组进行排序。

  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 *
叁.14),那里运用的是 C# 6.0 的语法。

 

  三.肆 对源成分执行操作

  输出种类大概不含有源系列的任何因素或因素属性。输出大概是通过将源成分用作输入参数总计出的值的队列。

威尼斯人线上娱乐 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 *
3.1四),那里运用的是 C# 6.0 的语法。

 

  三.肆 对源成分执行操作

  输出连串只怕不包蕴源系列的别样因素或因素属性。输出恐怕是经过将源成分用作输入参数计算出的值的队列。

威尼斯人线上娱乐 102 1 //数据源
2 double[] radii = {一, 2, 叁}; 3 四 //成立查询 5 var query = from radius
in radii 陆 select $”{radius * radius * 三.1四}”; 柒 八 //执行查询 九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;

4、LINQ 查询操作的门类涉及

  LINQ
查询操作在数据源、查询本身及查询执行中是强类型的。查询中变量的种类必须与数据源兰秋素的连串和 foreach 语句中迭代变量的门类包容。强类型能够确认保证在编写翻译时捕获类型错误,以便及时核对。

 

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

  LINQ
查询操作在数据源、查询本身及查询执行中是强类型的。查询中变量的类型必须与数据源否月素的门类和 foreach 语句中迭代变量的花色包容。强类型能够保险在编译时捕获类型错误,以便及时查对。

 

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

  LINQ
查询操作在数据源、查询自个儿及查询执行中是强类型的。查询中变量的品种必须与数据源夷则素的花色和 foreach 语句中迭代变量的连串包容。此强类型保障在编写翻译时捕获类型错误,以便能够在用户遭遇这几个不当以前纠正它们。

 

    • 隐式类型化变量

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

  下图演示不对数据实施转换的 LINQ to Objects
查询操作。源包括三个字符串类别,查询输出也是1个字符串连串。 

威尼斯人线上娱乐 104

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

  二摘取的指标的系列决定查询变量的种类。此处的 name 为一个字符串。因而,查询变量是贰个 IEnumerable<字符串>。
 

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

 

  肆.一 不转换源数据的询问

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

威尼斯人线上娱乐 105

  壹数据源的档次参数决定限制变量的档次。

  2挑选的靶子的品类决定查询变量的类型。此处的 name 为3个字符串。因而,查询变量是三个 IEnumerable<字符串>。
 

威尼斯人线上娱乐,  ③在 foreach 语句中循环访问查询变量。因为查询变量是多少个字符串种类,所以迭代变量也是三个字符串。
 

 

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

  下图演示不对数据进行转换的 LINQ to Objects
查询操作。源包涵二个字符串类别,查询输出也是三个字符串体系。 

威尼斯人线上娱乐 106

  (壹)数据源的连串参数决定限制变量的类别。

  (二)选取的目的的门类决定查询变量的门类。此处的 name 为一个字符串。由此,查询变量是1个 IEnumerable<字符串>。
 

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

 

   
 不必在注明并初步化变量时显式钦赐项目,您能够使用 var
修饰符来提示编写翻译器猜测并分配项目,证明为 var
的变量与显式内定其项指标变量壹样都以强类型。通过选取var,能够成立匿名类型,但它可用以其余部分变量。也能够行使隐式类型注脚数组。

  4.2 转换源数据的查询

  下图演示对数码进行简单转换的 LINQ to
SQL 查询操作。查询将七个 Customer 对象连串用作输入,并只选拔结果中的 Name 属性。因为 Name 是二个字符串,所以查询生成2个字符串体系作为出口。  

威尼斯人线上娱乐 107

  壹数据源的档次参数决定限制变量的档次。

  ②select 语句再次回到 Name 属性,而非完整的 Customer 对象。因为 Name 是一个字符串,所以 custNameQuery 的类型参数是 string,而非Customer。
 

  叁因为 custNameQuery 是二个字符串连串,所以 foreach 循环的迭代变量也非得是 string

 

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

威尼斯人线上娱乐 108

  1数据源的花色参数始终为查询中的范围变量的档次。

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

  叁因为查询变量的项目是隐式的,所以 foreach 循环中的迭代变量也必须是隐式的。

 

  肆.二 转换源数据的查询

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

威尼斯人线上娱乐 109

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

  ②select 语句再次回到 Name 属性,而非完整的 Customer 对象。因为 Name 是3个字符串,所以 custNameQuery 的花色参数是 string,而非Customer。
 

  叁因为 custNameQuery 是一个字符串连串,所以 foreach 循环的迭代变量也非得是 string

 

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

威尼斯人线上娱乐 110

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

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

  三因为查询变量的连串是隐式的,所以 foreach 循环中的迭代变量也必须是隐式的。

 

  肆.2 转换源数据的查询

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

威尼斯人线上娱乐 111

  (一)数据源的花色参数决定限制变量的花色。

  (2)select 语句重回 Name 属性,而非完整的 Customer 对象。因为 Name 是1个字符串,所以 custNameQuery 的品类参数是 string,而非Customer。
 

  (3)因为 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;

  肆.3 让编写翻译器测度类型新闻

  您也能够运用首要字 var,可用于查询操作中的任何部分变量。不过,编写翻译器为查询操作中的各类变量提供强类型。  

威尼斯人线上娱乐 113

 

  四.三 让编写翻译器推断类型消息

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

威尼斯人线上娱乐 114

 

  四.3 让编译器估量类型新闻

  您也得以采用让编写翻译器为您执行总体做事。关键字 var 可用于查询操作中的任何部分变量。然而,编写翻译器为查询操作中的各样变量提供强类型。  

威尼斯人线上娱乐 115

 

    • 对象和集合初步值设定项

伍、LINQ 中的查询语法和方斯洛伐克语法

  大家编辑的 LINQ 查询语法,在编写翻译代码时,CL索罗德会将查询语法转换为形式语法。那几个措施调用标准查询运算符的名称类似 WhereSelectGroupByJoinMax和 Average,大家也是足以一贯运用那些办匈牙利(Hungary)语法的。
 

  查询语法和章程语西班牙语义相同,然则,许多个人手发现查询语法更简明、更易于阅读。有个别查询必须代表为情势调用。例如,必须选拔方法调用表示检索成分的数额与内定的规范的询问。还非得利用办法供给寻找成分的最大值在源系列的查询。System.Linq 命名空间中的标准查询运算符的参阅文书档案经常使用办英语法。

 

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

  大家编辑的 LINQ 查询语法,在编写翻译代码时,CL福特Explorer会将查询语法转换为艺术语法。那一个主意调用标准查询运算符的称号类似 WhereSelectGroupByJoinMax和 Average,我们也是足以一向使用这一个方塞尔维亚语法的。
 

  查询语法和形式语印度语印尼语义相同,可是,许几个人手发现查询语法更简单、更便于阅读。有个别查询必须代表为格局调用。例如,必须利用情势调用表示检索成分的数码与钦定的规范的询问。还必须运用办法供给寻找成分的最大值在源种类的询问。System.Linq 命名空间中的标准查询运算符的参阅文书档案平日使用方西班牙语法。

 

5、LINQ 中的查询语法和方乌Crane语法

  在象征语言集成查询 (LINQ) 使用 LINQ
性查询语法,文书档案中的多数询问编写。然则,编写翻译代码时,必须将查询语法转换为艺术,那就必要.NET 公共语言运维时
(CL本田UR-V)。这个艺术调用标准查询运算符的称号类似 WhereSelectGroupByJoinMax和 Average。能够调用这几个点子直接使用方法语法而不是询问语法。
 

  查询语法和方德语土耳其共和国(The Republic of Turkey)语义相同,不过,许多个职员发现查询语法更简短、更易于阅读。某个查询必须代表为格局调用。例如,必须运用办法调用表示检索元素的数据与内定的规格的询问。还必须使用方法必要寻找成分的最大值在源体系的询问。System.Linq 命名空间中的标准查询运算符的参考文档常常选取格局语法。

 

   
 通过对象和集合初叶值设定项,开端化对象时无需为目的显式调用构造函数。起始值设定项普通用在将源数据投影到新数据类型的查询表达式中。假定2个类名称为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 中调用 AMDliSense
落成列表,那么您不只将看到 Where 方法,而且还会看到成千成万任何措施,如 SelectSelectManyJoin 和Orderby。下边是负有正式查询运算符。 

威尼斯人线上娱乐 123

  固然看起来 IEnumerable<T> 就像是已被另行定义以囊括这几个附加措施,但实际并非如此。那么些专业查询运算符都以当做“扩张方法”达成的。

 

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

威尼斯人线上娱乐 124 1 static
void Main(string[] args) 2 { 3 var nums = new int[4] { 1, 2, 三, 四 };
肆 5 //创立查询表达式 六 var qureyNums = from n in nums 七 where n % 二 == 0
八 orderby n descending 九 select n; 10 1壹Console.WriteLine(“qureyNums:”); 1二 foreach (var n in qureyNums) 1三 { 14
Console.WriteLine(n); 一5 } 1六 一7 //选择方法开始展览查询 1捌 var queryNums2 =
nums.Where(n => n % 2 == 0).OrderByDescending(n => n); 19 20
Console.WriteLine(“qureyNums二:”); 贰一 foreach (var n in queryNums2) 2二 {
2叁 Console.WriteLine(n); 贰肆 } 贰五 二6 Console.Read(); 二7 } 下边包车型地铁示范演示简单的询问表明式和编辑为根据方法的查询的语义上等效的查询。

威尼斯人线上娱乐 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 % 二 == 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
表明式。将代码编写为匿超形式或泛型委托或表明式树是一种便利的主意,不然编写起来就要麻烦得多。=> 是
lambda 运算符,可读为“goes
to”。运算符左边的 num 是输入变量,与查询表明式中的 num 绝对应。编写翻译器可揣测 num 的类型,因为它驾驭 numbers 是泛型 IEnumerable<T> 类型。lambda
表明式与查询语法中的说明式或任何别的 C#
表达式或语句中的表达式相同;它能够包蕴方法调用和其余复杂逻辑。“重返值”便是表达式结果。
 

 

    • 匿名类型

  五.三 查询的组合性

  在上头的代码示例中,请留心 OrderBy 方法是通过在对 Where 的调用中利用点运算符来调用的。Where 生成筛选连串,然后 Orderby 通过对该种类排序来对它实行操作。因为查询会再次回到 IEnumerable,所以你可通过将艺术调用链接在同步,在措施语法军长那些查询组合起来。那正是在您通过选拔查询语法编写查询时编写翻译器在后台所进行的操作。并且鉴于查询变量不存款和储蓄查询的结果,因而你能够随时修改它或将它用作新查询的底子,即便在实践它后。

 

  伍.三 查询的组合性

  在上头的代码示例中,请留心 OrderBy 方法是透过在对 Where 的调用中运用点运算符来调用的。Where 生成筛选类别,然后 Orderby 通过对该类别排序来对它进行操作。因为查询会再次回到 IEnumerable,所以您可由此将艺术调用链接在一起,在格局语法大校那一个查询组合起来。那便是在您通过应用查询语法编写查询时编写翻译器在后台所实施的操作。并且鉴于查询变量不存储查询的结果,因而你能够随时修改它或将它用作新查询的根底,尽管在履行它后。

 

  5.3 查询的组合性

  在上头的代码示例中,请小心 OrderBy 方法是经过在对 Where 的调用中选择点运算符来调用的。Where 生成筛选种类,然后 Orderby 通过对该体系排序来对它进行操作。因为查询会重回 IEnumerable,所以您可经过将艺术调用链接在共同,在点子语法上将那些查询组合起来。那正是在你通过运用查询语法编写查询时编译器在后台所推行的操作。并且鉴于查询变量不存款和储蓄查询的结果,因而你能够每1天修改它或将它用作新查询的根基,尽管在实施它后。

 

正文首联:

 

–待整理形成后再度公布到首页–

  

] 开端使用 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
表明式是1种内联函数,该函数使用 =>
运算符将输入参数与函数体分离,并且能够在编译时转换为委托或发布式树。在
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
表示一种新的处理集合的点子。
采纳旧办法,您必须编写制定钦定如何从集合检索数据的错综复杂的 foreach 循环。
而采取 LINQ 方法,您只需编写描述要物色的始末的注明性代码。

     别的,与古板的 foreach
循环比较,LINQ 查询全体叁大优势:

    • 它们更领悟、更易读,尤其在筛选四个原则时。
    • 它们利用最少的应用程序代码提供有力的筛选、排序和分组作用。
    • 无须修改或只需做非常的小的改动即可将它们移植到别的数据源。


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图