• LINQ

     语言集成查询 (LINQ) 是 Visual Studio
2008 中引入的一组功效,它在目的领域和数码领域之间架起了一座大桥。可为
C# 和 Visual Basic 语言语法提供强大的查询功效。 LINQ
引入了专业、命理术数的多少查询和翻新方式,该技术能够增添为大约帮忙其他项目标数据存储。Visual
Studio 包括 LINQ 提供程序的程序集,借助这几个程序集,就能将 LINQ 用于 .NET
Framework 集合、SQL Server 数据库、ADO.NET 数据集和 XML 文档。

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

     查询是一种从数据源检索数据的表达式。
查询普通用专门的询问语言来代表。
随着年华的延期,人们已经为各个数据源开发了差别的言语;例如,用于关周密据库的
SQL 和用于 XML 的 XQuery。
因而,开发人士不得不针对他们不可以不接济的每种数据源或数额格式而上学新的查询语言。
LINQ
通过提供一种跨各个数据源和数量格式使用数据的一律模型,简化了这一气象。
在 LINQ 查询中,始终会用到目的。 可以动用相同的中央编码形式来询问和转换
XML 文档、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ
提供程序可用的别样其余格式的数码。

图片 1

 

    • 获得数据源

     LINQ语句是在 foreach
语句中履行查询,而 foreach 要求采纳 IEnumerable 或
IEnumerable<T>。帮忙 IEnumerable<T> 或派生接口(如泛型
IQueryable<T>)的门类称为“可查询类型”。

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
    • 成立查询

     查询指定要从数额源中检索的音信。查询仍能指定在回到那些音信在此之前怎么着对其进行排序、分组和结构化。查询存储在询问变量中,并用查询表达式进行开端化。

    • 执行查询
      • 推迟执行

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

foreach (int num in numQuery)
{
    Console.Write("{0,1} ", num);
}
      • 强制立时实施

   
 对一层层源元素执行聚合函数的询问必须首先循环访问那一个要素。
Count、马克斯、Average 和 First 就属于此类查询。由于查询自己必须使用
foreach 以便回到结果,由此这么些查询在推行时不应用显式 foreach
语句。其它还要注意,这一个品种的询问重临单个值,而不是 IEnumerable
集合。

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

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

List<int> numQuery2 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToList();
  • 支持 LINQ 的功能
    • 询问表明式

     查询表达式使用类似于 SQL 或 XQuery
的表明性语法来询问 IEnumerable 集合。在编译时,查询语法转换为对 LINQ
提供程序的正统查询运算符增添方法完结的主意调用。应用程序通过运用 using
指令指定适当的命名空间来支配范围内的专业查询运算符。上边的查询表达式获取一个字符串数组,按字符串中的第三个字符对字符串举办分组,然后对各组进行排序。

var query = from str in stringArray
            group str by str[0] into stringGroup
            orderby stringGroup.Key
            select stringGroup;
    • 隐式类型化变量

   
 不必在宣称并初步化变量时显式指定项目,您可以拔取 var
修饰符来提示编译器预计并分配项目,讲明为 var
的变量与显式指定其类其他变量一样都是强类型。通过利用
var,能够创设匿名类型,但它可用以其它部分变量。也足以运用隐式类型注脚数组。

var number = 5;
var name = "Virginia";
var query = from str in stringArray
            where str[0] == 'm'
            select str;
    • 目的和集合起初值设定项

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

Customer cust = new Customer { Name = "Mike", Phone = "555-1212" };
    • 匿名类型

   
 匿名类型由编译器创设,且项目名称只可用来编译器。匿名类型提供了一种在查询结果中临时分组一组属性的有利方法,无需定义单独的命名类型。使用新的表达式和对象开头值设定项开始化匿名类型。

select new {name = cust.Name, phone = cust.Phone};
    • 扩大方法

   
 扩充方法是一种可与品类涉及的静态方法,由此得以像实例方法那样对品种调用它。实际上,此效能使你能够将新格局“添加”到现有项目,而不会实际修改它们。标准查询运算符是一组增添方法,它们为兑现
IEnumerable<T> 的其余类型提供 LINQ 查询效用。

    • Lambda 表达式

     Lambda
表明式是一种内联函数,该函数使用 =>
运算符将输入参数与函数体分离,并且可以在编译时转换为委托或发布式树。在
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
关键字很有用。平常,大家提议一旦您使用
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,
电视机alue>。 该集合可以是用户定义的聚集,也足以是 .NET Framework API
重临的集结。

     从根本上说,LINQ to Objects
表示一种新的处理集合的法子。
拔取旧办法,您必须编制指定怎么着从集合检索数据的繁杂的 foreach 循环。
而使用 LINQ 方法,您只需编写描述要寻找的内容的表明性代码。

     别的,与价值观的 foreach
循环相比较,LINQ 查询所有三大优势:

    • 它们更分明、更易读,更加在筛选两个标准时。
    • 它们拔取最少的应用程序代码提供强大的筛选、排序和分组功效。
    • 无需修改或只需做很小的修改即可将它们移植到其余数据源。

相关文章

网站地图xml地图