【已更新最新开发文章,点击查看详细】
LINQ 提供程序可用的任何其他格式的数据。
查询操作的三个部分
LINQ 查询操作都由以下三个不同的操作组成:
-
获取数据源。
-
创建查询。
-
执行查询。
本主题的其余部分也会引用此示例。
class IntroToLINQ { static void Main() { // 1. 数据源 int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; // 2. 查询表达式 numQuery 是 IEnumerable<int> 类型 var numQuery = from num in numbers where (num % 2) == 0 select num; // 3. 执行查询 foreach (int num in numQuery) { Console.Write("{0,1} ", num); } } }
LINQ 中,查询的执行与查询本身截然不同;换句话说,如果只是创建查询变量,则不会检索任何数据。
数据源
IQueryable<T>)的类型称为可查询类型。
XElement 类型中:
// using System.Xml.Linq; XElement contacts = XElement.Load(@"c:\myContactList.xml");// 从 xml 文件创建数据源
IEnumerable<T>。
Northwnd db = new Northwnd(@"c:\northwnd.mdf"); // 查询城市名称为 London 的客户 IQueryable<Customer> custQuery = from cust in db.Customers where cust.City == "London" select cust;
IEnumerable<T> 接口或从中继承的接口的任意对象。
支持非泛型 IEnumerable 接口的类型(如 ArrayList)还可用作 LINQ 数据源。 有关详细信息,请参阅如何:使用 LINQ 查询 ArrayList (C#)。
查询
为使编写查询的工作变得更加容易,C# 引入了新的查询语法。
标准查询运算符概述 (C#)。
还可以使用方法语法来表示查询。 有关详细信息,请参阅 LINQ 中的查询语法和方法语法。
查询执行
延迟执行
此概念称为延迟执行,下面的示例对此进行了演示:
// 执行查询 foreach (int num in numQuery) { Console.Write("{0,1} ", num); }
例如,在上一个查询中,迭代变量 num 保存了返回的序列中的每个值(一次保存一个值)。
在应用程序中,可以创建一个检索最新数据的查询,并可以按某一时间间隔反复执行该查询以便每次检索不同的结果。
强制立即执行
下面的查询返回源数组中偶数的计数:
var evenNumQuery = from num in numbers where (num % 2) == 0 select num; int evenNumCount = evenNumQuery.Count();
要强制立即执行任何查询并缓存其结果,可调用 ToList 或 ToArray 方法。
List<int> numQuery2 = (from num in numbers where (num % 2) == 0 select num).ToList(); var numQuery3 = (from num in numbers where (num % 2) == 0 select num).ToArray();
但是,通过调用 ToList 或 ToArray,也可以将所有数据缓存在单个集合对象中。
其他技术请参考
【已更新最新开发文章,点击查看详细】