您的位置:知识库 » 数据库

LINQ 查询介绍

来源: msdn  发布时间: 2008-09-26 12:44  阅读: 22486 次  推荐: 0   原文链接   [收藏]  
[1] LINQ 查询介绍
[2] LINQ 查询介绍
[3] LINQ 查询介绍

 

查询

查询指定要从数据源中检索的信息。查询还可以指定在返回这些信息之前如何对其进行排序、分组和结构化。查询存储在查询变量中,并用查询表达式进行初始化。为使编写查询的工作变得更加容易,C# 引入了新的查询语法。

上一个示例中的查询从整数数组中返回所有偶数。该查询表达式包含三个子句:from、where 和 select。(如果您熟悉 SQL,您会注意到这些子句的顺序与 SQL 中的顺序相反。) from 子句指定数据源,where 子句应用筛选器,select 子句指定返回的元素的类型。LINQ 查询表达式(C# 编程指南)一节中详细讨论了这些子句和其他查询子句。目前需要注意的是,在 LINQ 中,查询变量本身不执行任何操作并且不返回任何数据。它只是存储在以后某个时刻执行查询时为生成结果而必需的信息。有关在幕后是如何构建查询的更多信息,请参见标准查询运算符概述。

查询执行

延迟执行

如前所述,查询变量本身只是存储查询命令。实际的查询执行会延迟到在 foreach 语句中循环访问查询变量时发生。此概念称为“延迟执行”,下面的示例对此进行了演示:

 

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

 

foreach 语句也是检索查询结果的地方。例如,在上一个查询中,迭代变量 num 保存了返回的序列中的每个值(一次保存一个值)。

由于查询变量本身从不保存查询结果,因此可以根据需要随意执行查询。例如,可以通过一个单独的应用程序持续更新数据库。在应用程序中,可以创建一个检索最新数据的查询,并可以按某一时间间隔反复执行该查询以便每次检索不同的结果。

强制立即执行

对一系列源元素执行聚合函数的查询必须首先循环访问这些元素。Count、Max、Average 和 First 就属于此类查询。由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。下面的查询返回源数组中偶数的计数:

 

var evenNumQuery = 
from num
in numbers
where (num % 2) == 0
select num;

int evenNumCount = evenNumQuery.Count();

 

若要强制立即执行任意查询并缓存其结果,可以调用 ToList<(Of <(TSource>)>)ToArray<(Of <(TSource>)>) 方法。

 

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

// or like this:
// numQuery3 is still an int[]

var numQuery3
=
(from num
in numbers
where (num % 2) == 0
select num).ToArray();

 

此外,还可以通过在紧跟查询表达式之后的位置放置一个 foreach 循环来强制执行查询。但是,通过调用 ToListToArray,也可以将所有数据缓存在单个集合对象中。

0
0
标签:Linq 查询

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻