色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

LINQ 查詢介紹

查詢是一種從數(shù)據(jù)源檢索數(shù)據(jù)的表達(dá)式。查詢通常用專門的查詢語言來表示。隨著時(shí)間的推移,人們已經(jīng)為各種數(shù)據(jù)源開發(fā)了不同的語言;例如,用于關(guān)系數(shù)據(jù)庫(kù)的 SQL 和用于 XML 的 XQuery。因此,開發(fā)人員不得不針對(duì)他們必須支持的每種數(shù)據(jù)源或數(shù)據(jù)格式而學(xué)習(xí)新的查詢語言。LINQ 通過提供一種跨各種數(shù)據(jù)源和數(shù)據(jù)格式使用數(shù)據(jù)的一致模型,簡(jiǎn)化了這一情況。在 LINQ 查詢中,始終會(huì)用到對(duì)象。可以使用相同的基本編碼模式來查詢和轉(zhuǎn)換 XML 文檔、SQL 數(shù)據(jù)庫(kù)、ADO.NET 數(shù)據(jù)集、.NET 集合中的數(shù)據(jù)以及對(duì)其有 LINQ 提供程序可用的任何其他格式的數(shù)據(jù)。

查詢操作的三個(gè)部分

所有 LINQ 查詢操作都由以下三個(gè)不同的操作組成:

  • 獲取數(shù)據(jù)源。
  • 創(chuàng)建查詢。
  • 執(zhí)行查詢。

下面的示例演示如何用源代碼表示查詢操作的三個(gè)部分。為了方便起見,此示例將一個(gè)整數(shù)數(shù)組用作數(shù)據(jù)源;但其中涉及的概念同樣適用于其他數(shù)據(jù)源。本主題的其余部分也會(huì)引用此示例。

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);
}
}
}

下圖顯示了完整的查詢操作。在 LINQ 中,查詢的執(zhí)行與查詢本身截然不同;換句話說,如果只是創(chuàng)建查詢變量,則不會(huì)檢索任何數(shù)據(jù)。

數(shù)據(jù)源

在上一個(gè)示例中,由于數(shù)據(jù)源是數(shù)組,因此它隱式支持泛型 IEnumerable<(Of <(T>)>) 接口。這一事實(shí)意味著該數(shù)據(jù)源可以用 LINQ 進(jìn)行查詢。在 foreach 語句中執(zhí)行查詢,而 foreach 要求使用 IEnumerable 或 IEnumerable<(Of <(T>)>)。支持 IEnumerable<(Of <(T>)>) 或派生接口(如泛型 IQueryable<(Of <(T>)>))的類型稱為“可查詢類型”。

可查詢類型不需要進(jìn)行修改或特殊處理就可以用作 LINQ 數(shù)據(jù)源。如果源數(shù)據(jù)還沒有作為可查詢類型出現(xiàn)在內(nèi)存中,則 LINQ 提供程序必須以此方式表示源數(shù)據(jù)。例如,LINQ to XML 將 XML 文檔加載到可查詢的 XElement 類型中:

 

// Create a data source from an XML document.
// using System.Xml.Linq;
XElement contacts = XElement.Load(@"c:/myContactList.xml");

 

查詢

查詢指定要從數(shù)據(jù)源中檢索的信息。查詢還可以指定在返回這些信息之前如何對(duì)其進(jìn)行排序、分組和結(jié)構(gòu)化。查詢存儲(chǔ)在查詢變量中,并用查詢表達(dá)式進(jìn)行初始化。為使編寫查詢的工作變得更加容易,C# 引入了新的查詢語法。

上一個(gè)示例中的查詢從整數(shù)數(shù)組中返回所有偶數(shù)。該查詢表達(dá)式包含三個(gè)子句:from、where 和 select。(如果您熟悉 SQL,您會(huì)注意到這些子句的順序與 SQL 中的順序相反。) from 子句指定數(shù)據(jù)源,where 子句應(yīng)用篩選器,select 子句指定返回的元素的類型。LINQ 查詢表達(dá)式(C# 編程指南)一節(jié)中詳細(xì)討論了這些子句和其他查詢子句。目前需要注意的是,在 LINQ 中,查詢變量本身不執(zhí)行任何操作并且不返回任何數(shù)據(jù)。它只是存儲(chǔ)在以后某個(gè)時(shí)刻執(zhí)行查詢時(shí)為生成結(jié)果而必需的信息。有關(guān)在幕后是如何構(gòu)建查詢的更多信息,請(qǐng)參見標(biāo)準(zhǔn)查詢運(yùn)算符概述。

查詢執(zhí)行

延遲執(zhí)行

如前所述,查詢變量本身只是存儲(chǔ)查詢命令。實(shí)際的查詢執(zhí)行會(huì)延遲到在 foreach 語句中循環(huán)訪問查詢變量時(shí)發(fā)生。此概念稱為“延遲執(zhí)行”,下面的示例對(duì)此進(jìn)行了演示:

 

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

it知識(shí)庫(kù)LINQ 查詢介紹,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 舒兰市| 镇康县| 崇阳县| 图木舒克市| 京山县| 丰镇市| 阿图什市| 腾冲县| 武汉市| 正镶白旗| 嵊泗县| 宁南县| 柳州市| 平塘县| 叶城县| 紫阳县| 兰州市| 会同县| 宾阳县| 海安县| 磐石市| 岑溪市| 怀仁县| 铜山县| 伊吾县| 十堰市| 南江县| 宣城市| 尼玛县| 湟中县| 集贤县| 湘阴县| 西吉县| 称多县| 二连浩特市| 长宁区| 应用必备| 师宗县| 大宁县| 北川| 南宫市|