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...