C# Linq高級查詢


    一:什么是Linq
    在關系型數據庫系統中,數據被組織放入規范化很好的表中,並且通過簡單且強大的SQL語言來進行訪問。因為數據在表中遵從某些嚴格的規則,所以SQL可以和它們很好的配合使用。
 然而,在程序中卻與數據庫相反,保存在類對象或結構中的數據差異很大。因此,沒有通用的查詢語言來從數據結構中獲取數據。從對象獲取數據的方法一直都是作為程序的一部分而設計的。然而使用LINQ可以很輕松地查詢對象集合。

    二:LINQ的重要高級特性:
1)    LINQ(發音link)代表語言集成查詢(Language Integrated Query)
2)    LINQ是.NET框架的擴展,它允許我們以使用SQL查詢數據庫的方式來查詢數據集合
3)    使用LINQ,你可以從數據庫、程序對象集合以及XML文檔中查詢數據

    三:Linq提供程序
LINQ可以和各種類型的數據源一起工作。然而,對於每種數據源類型,在其背后一定有根據該數據源類型實現LINQ查詢的代碼模塊。這些代碼模塊叫做LINQ提供程序(provider)。

有關LINQ提供程序的要點如下:
1)    微軟為一些常見的數據源類型提供了LINQ Provider
2)    第三方在不斷提供針對各種數據源類型的LINQ Provider

    四:方法語法和查詢語法
寫LINQ查詢時可以使用兩種形式的語法:方法語法和查詢語法。
1)    方法語法(method syntax)使用標准的方法調用。這些方法是一組標准查詢運算符的方法。
2)    查詢語法(query syntax)看上去和SQL語句相似
3)    在一個查詢中可以組合兩種形式
4)    方法語法是命令式(imperative)的,它指明了查詢方法調用的順序。
5)    查詢語法是聲明式(declarative)的,即查詢描述的是你想返回的東西,但並么有指明如何執行這    個查詢。
6)    編譯器會將使用查詢語法表示的查詢翻譯為方法調用的形式。這兩種形式在運行時沒有性能上的差異。
7)    微軟推薦使用查詢語法,因為它更易讀,能更清晰地表明查詢意圖,因此也更不容易出錯

    五:查詢變量
LINQ查詢可以返回兩種類型的結果–可以是一個枚舉(可枚舉的一組數據,不是枚舉類型),它滿足查詢參數的項列表;也可以是一個叫做標量(scalar)的單一值,它是滿足查詢條件的結果的某種摘要形式。

1)    如果查詢表達式返回枚舉,查詢直到處理枚舉時才會執行
2)    如果枚舉被處理多次,查詢就會執行多次
3)    如果在進行遍歷后,查詢執行之前數據有改動,則查詢會使用新的數據
4)    如果查詢表達式返回標量,查詢立即執行,並且把結果保存在查詢變量中

    六:查詢表達式的結構
查詢表達式由查詢體后的from子句組成
1)    子句必須按照一定順序出現
2)    from子句和select…group子句這兩部分是必需的
3)    LINQ查詢表達式中,select子句在表達式最后
4)    可以有任意多的from…let…where子句
from子句
from子句指定了要作為數據源使用的數據集合。它還引入了迭代變量
1)    迭代變量逐個表示數據源的每個元素
2)    from子句的語法如下
a)    Type是集合中元素的類型。這是可選的,因為編譯器可以從集合來推斷類型
b)    Item是迭代變量的名字
c)    Items是要查詢的集合的名字。集合必須是可枚舉的

join子句
LINQ中的join子句和SQL中的JOIN(聯結)子句相似。不同的是,我們現在不但可以在數據庫的表上進行聯結,還可以在集合對象上進行該操作
1)    使用聯結來結合兩個多多個集合中的數據
2)    聯結操作接受兩個集合然后創建一個臨時的對象集合,每個對象包含原始集合對象中的所有字段

orderby子句
orderby子句根據表達式按順序返回結果項
1)    orderby子句默認是升序
2)    可以有任意多子句,它們必須用逗號分隔

select…group子句
select…group子句的功能如下所示
1)    select子句指定所選對象的哪部分應該被select。它可以指定下面的任意一項
a)    整個數據項
b)    數據項的一個字段
c)    數據項的幾個字段組成的新對象(或類似其他值)
2)    group…by子句是可選的,用來指定選擇的項如何分組


group子句
group子句把select的對象根據一些標准進行分組
1)    如果項包含在查詢的結果中,它們就可以根據某個字段的值進行分組。作為分組依據的屬性叫做鍵(key)
2)    group子句返回的不是原始數據源中項的枚舉,而是返回可以枚舉已經形成的項的分組的可枚舉類型
3)    分組本身是可枚舉類型,它們可以枚舉實際的項

into子句
查詢延續子句可以接受查詢的一部分結果並賦予一個名字,從而可以在查詢的另一部分中使用








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM