C 中Linq查詢基本操作使用例項

2022-09-26 09:06:08 字數 4103 閱讀 1069

摘要:本文介紹linq查詢基本操作(查詢關鍵字)

- from 子句

- where 子句

- select子句

- group 子句

- into 子句

- orderby 子句

- join 子句

- let 子句

- 復合from子句

- 在某些情況下,源序列中的每個元素本身可能是序列(集合),也可能包含序列

- 用語訪問單個資料庫中的內部集合

- 使用多個from字句執行連線

- 可以包含多個可從獨立資料來源生成補充查詢的from字句

復合(顧名思義就是有多from的字句)例項:

複製** **如下:

class program

}, new student

www.cppcns.com; }, new student

}, new student

},        

}; var query = from stuent in students from score in stuent.scores where score > 90 select new ; foreach (var student in query)//大於90分的顯示出來   score:", student.last, student.score);

}console.readline();

}}複製** **如下:

public class student

public list scores

} public class employee

public string last public int id

}執行結果: xiaogui score:97

xiaogui score:91

xiaozhan score:92

xiaowan score:92

let 關鍵字(使用let字句擴充套件範圍變數)

- 建立乙個可以查詢自身的可列舉型別

- 使查詢只能對範圍變數word呼叫一次tolower。

如果不使用let,則必須在where字句的每個謂詞中呼叫tolower

例:把每個單詞開頭包含a或者e的找出來

複製** **如下:

using system; using system.linq; public class test

; var query = from sentence in strings

let words = sentence.split(' ')//用空格分割成陣列  from word in words

let w = word.tolower()//把每個字母小寫  where w[0] == 'a' || w[0] == 'e' select word; foreach (var s in query)

console.readline();

}}where 關鍵字 (篩選)

- 乙個查詢表示式可以包含多個where字句

例:(把包含a的找出來)

複製** **如下:

using system; using system.linq; public class test

; var query = from s in str where s == "a" select s; foreach (var s in query)

console.readline();

}}orderby 關鍵字 (排序)

- 在查詢表示式中,orderby字句可以使返回的序列(組)按公升序或降序。

- 可以指定多個鍵,以便執行乙個或多個次要排序操作

- 預設排序順序為公升序

- 編譯時,orderby字句被轉換為對orderby方法的呼叫。orderby字句中的多個鍵被轉換為thenby方法呼叫

descending 降序

ascending 公升序

例1:公升序

複製** **如下:

using system; using system.linq; public class test

; var query = from s in str orderby s ascending select s;

}}結果為: a b c

例2:降序

複製** **如下:

using system; using system.linq; public class test

; var query = from s in str orderby s descending select s;

}}結果為: c b a

group 關鍵字 (分組)

- group 字句返回乙個igrouping(tkey,telement)物件序列 

- 編譯時,group子句被轉換為對groupby方法的呼叫

(linq查詢表示式可以以select或者group結束) (如果想要對每個組執行附加查詢操作,則可以使用into上下文關鍵字指定乙個臨時識別符號,使用into時,必須繼續編寫該查詢,並最終用乙個select語句或另一 個group子句結束該查詢)

例: 複製** **如下:

using system; using system.linq; public class test

; var query = from s in str

group s by s[0]

into p where p.key == 'a' || p.key == 'b' || p.key == 'c' orderby p.key descending select p.key; foreach (var s in query)

console.readline();

}}結果為: c b a

說明: group s by s[0] into p 意思是針對範圍變數s用「s[0]」分組,本例中是用第乙個字母分組

join 關鍵字 (聯接)

- 使用join 子句可以將來自不同源序列並且在物件模型中沒有直接關係的元素相關聯

- 唯一的要求是每個源中的元素需要共享某個可以進行比較以判斷是否相等的值

- join字句使用特殊的equals關鍵字比較指定的鍵是否相等

三中常見的連線型別

- 內部聯接

- 分組聯接

- 左外部聯接

1.內部聯接

複製** **如下:

var query = from a in str

join b in str2 on a.id equals b.id select new ;

2.分組聯接:(into 可以將join暫存起來)

複製** **如下:

var query = from a in str

join b in str2 on a.id equals b.id

into c select new

3.左外部聯接

- 在左外部聯接中,將返回左則源序列中所有元素,即使它們在右則序列中沒有匹配的元素也是如此。

- 若要在linq中執行左外部聯接,請將defaultifempty方法與分組聯接結合起來,以指定要在某個左則元素不具有匹配元素時產生的預設右則元素。可以使用null作為任何引

用型別的預設值,也可以指定使用者定義的預設型別。

複製** **如下:

var query = from category in categories

join prod in products on category.id equals prod.categoryid

into prodgroup from item prodgroup.defaultifempty( new product) select new

equalse 運算子

- join 子句執行同等聯接。換句話說,只能基於兩個鍵之間的相等關係進行匹配

- 為了表明所有聯接都是相等聯接,join子句使用equals關鍵字而不是==運算子

復合鍵

- 使用復合鍵可以測試多個值是否相等

select 關鍵字 選擇

本文標題: c#中linq查詢基本操作使用例項

本文位址:

Linq 查詢基本操作

from 子句 where 子句 select子句 group 子句 into 子句 orderby 子句 join 子句 let 子句 復合from子句 在某些情況下,源序列中的每個元素本身可能是序列 集合 也可能包含序列 用語訪問單個資料庫中的內部集合 使用多個from字句執行連線 可以包含多個...

LINQ 之 基本 LINQ 查詢操作

在 linq 查詢中,第一步是指定資料來源。像在大多數程式語言中一樣,必須先宣告變數,才能使用它。在 linq 查詢中,最先使用from子句的目的是引入資料來源和範圍變數。queryallcustomers 是 ienumerable型別 資料來源 customers 和範圍變數 cust var ...

C 中Linq延遲查詢的例子

提出問題 下面所給 編譯時正常,但是執行時會出錯,請指出程式在執行時能夠執行到編號為 1 2 3 的 行中的哪一行。using system using system.collections.generic usi程式設計客棧ng system.linq namespace deferredexec...