C#2008与.NET 3.5 高级程序设计读书笔记(14) LINQ

1.LINQ简介

LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。

LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源.

LINQ是一系列相关的技术,试图提供一个单一的,对称的方式来与各种形式的数据交互.

语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中引入的一项创新功能,它在对象领域和数据领域之间架起了一座桥梁。在 Visual Studio 中,可以用 Visual Basic 或 C# 为以下数据源编写 LINQ 查询:SQL Server 数据库、XML 文档、ADO.NET 数据集,以及支持 IEnumerable 或泛型 IEnumerable<T> 接口的任意对象集合。如下图:

2.核心LINQ程序集

3.LINQ查询简介:

可以使用相同的基本编码模式来查询和转换 XML 文档、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ 提供程序可用的任何其他格式的数据。

所有 LINQ 查询操作都由以下三个不同的操作组成:

(1)获取数据源(LINQ 数据源是支持泛型 IEnumerable<T> 接口或从该接口继承的接口的任意对象).

(2)创建查询。

(3)执行查询。 

代码
class IntroToLINQ
{
static void Main()
{
// The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

// 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num
in numbers
where (num % 2) == 0
select num;

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

4.LINQ 和泛型类型 (C#)

(1)LINQ 查询中的 IEnumerable<T> 变量

LINQ 查询变量类型化为 IEnumerable<T> 或派生类型,如 IQueryable<T>当您看到类型化为 IEnumerable<Customer> 的查询变量时,这只意味着在执行该查询时,该查询将生成包含零个或多个 Customer 对象的序列。 如果您愿意,可以使用 var 关键字来避免使用泛型语法。var 关键字指示编译器通过查看在 from 子句中指定的数据源来推断查询变量的类型。下面的示例生成与上一个示例相同的编译代码:

代码
IEnumerable<Customer> customerQuery =
from cust
in customers
where cust.City == "London"
select cust;

foreach (Customer customer in customerQuery)
{
Console.WriteLine(customer.LastName
+ ", " + customer.FirstName);
}

(2)让编译器处理泛型类型声明

代码
var customerQuery2 =
from cust
in customers
where cust.City == "London"
select cust;

foreach(var customer in customerQuery2)
{
Console.WriteLine(customer.LastName
+ ", " + customer.FirstName);
}

 5.基本 LINQ 查询操作 (C#)

 (1).获取数据源

//queryAllCustomers is an IEnumerable<Customer>
//数据源 (customers)
//范围变量 (cust)
var queryAllCustomers = from cust in customers
select cust;

(2)筛选

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

(3)排序

var queryLondonCustomers3 =
from cust
in customers
where cust.City == "London"
orderby cust.Name ascending
select cust;

(4)分组

代码
// queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>>
var queryCustomersByCity =
from cust
in customers
group cust by cust.City;

// customerGroup is an IGrouping<string, Customer>
foreach (var customerGroup in queryCustomersByCity)
{
Console.WriteLine(customerGroup.Key);
foreach (Customer customer in customerGroup)
{
Console.WriteLine(
" {0}", customer.Name);
}
}

(5)联接

//因为 LINQ 中的外键在对象模型中表示为包含项集合的属性。例如
//Customer 对象包含 Order 对象的集合。不必执行联接,只需使用点表
//示法访问订单
from order in Customer.Orders...
原文地址:https://www.cnblogs.com/engine1984/p/1787746.html