含義:指定查詢操作的資料來源和範圍變數
在 linq 查詢中,第一步是指定資料來源。像在大多數程式語言中一樣,在 c# 中,必須先宣告變數,才能使用它。在 linq 查詢中,最先使用 from 子句的目的是引入資料來源 ( customers) 和範圍變數 ( cust)。
//queryallcustomers is an ienumerablevar queryallcustomers = from cust in customers
select cust;
含義:指定查詢結果的型別和表現形式
select 子句生成查詢結果並指定每個返回的元素的「形狀」或型別。 例如,您可以指定結果包含的是整個 customer 物件、僅乙個成員、成員的子集,還是某個基於計算或新物件建立的完全不同的結果型別。 當 select 子句生成除源元素副本以外的內容時,該操作稱為「投影」。 使用投影轉換資料是 linq 查詢表示式的一種強大功能。
含義:篩選元素的邏輯條件,一般由邏輯運算子組成
也許最常用的查詢操作是應用布林表示式形式的篩選器。此篩選器使查詢只返回那些表示式結果為 true 的元素。使用 where 子句生成結果。 實際上,篩選器指定從源序列中排除哪些元素。在下面的示例中,只返回那些位址位於倫敦的 customers。
var querylondoncustomers = from cust in customers
where cust.city == "london"
select cust;
含義:對查詢進行分組
使用 group 子句,您可以按指定的鍵分組結果。 例如,您可以指定結果應按 city 分組,以便位於倫敦或巴黎的所有客戶位於各自組中。 在本例中, cust.city 是鍵。
// querycustomersbycity is an ienumerable>
var querycustomersbycity =
from cust in customers
group cust by cust.city;
// customergroup is an igroupingforeach (var customergroup in querycustomersbycity)
", customer.name);
}}
在使用
group 子句結束查詢時,結果採用列表的列表形式。 列表中的每個元素是乙個具有
key 成員及根據該鍵分組的元素列表的物件。 在迴圈訪問生成組序列的查詢時,您必須使用巢狀的
foreach 迴圈。 外部迴圈用於迴圈訪問每個組,內部迴圈用於迴圈訪問每個組的成員。
含義:對查詢結果進行排序,可以為「公升序」或「降序」
通常可以很方便地將返回的資料進行排序。orderby 子句將使返回的序列中的元素按照被排序的型別的預設比較器進行排序。 例如,下面的查詢可以擴充套件為按 name 屬性對結果進行排序。 因為 name 是乙個字串,所以預設比較器執行從 a 到 z 的字母排序。
var querylondoncustomers3 =
from cust in customers
where cust.city == "london"
orderby cust.name ascending
select cust;
含義:連線多個查詢的操作源
聯接運算建立資料來源中沒有顯式建模的序列之間的關聯。例如,您可以執行聯接來查詢符合以下條件的所有客戶:位於巴黎,且從位於倫敦的**商處訂購產品。在 linq 中, join 子句始終針對物件集合而非直接針對資料庫表執行。 在 linq 中,您不必像在 sql 中那樣頻繁使用 join,因為 linq 中的外來鍵在物件模型中表示為包含項集合的屬性。 例如, customer 物件包含 order 物件的集合。 不必執行聯接,只需使用點表示法訪問訂單:
from order in customer.orders...
含義:引入用於儲存查詢表示式中的子表示式結果的範圍變數
在查詢表示式中,儲存子表示式的結果有時很有用,這樣可以在隨後的子句中使用。可以使用 let 關鍵字完成這一工作,該關鍵字可以建立乙個新的範圍變數,並且用您提供的表示式的結果初始化該變數。 一旦用值初始化了該範圍變數,它就不能用於儲存其他值。但如果該範圍變數儲存的是可查詢的型別,則可以對其進行查詢。
建立乙個可以查詢自身的可列舉型別。
使查詢只能對範圍變數 word 呼叫一次 tolower。 如果不使用 let,則必須在 where 子句的每個謂詞中呼叫 tolower。
class letsample1
; // split the sentence into an array of words
// and select those whose first letter is a vowel.
var earlybirdquery =
from sentence in strings
let words = sentence.split(' ')
from word in words
let w = word.tolower()
where w[0] == 'a' || w[0] == 'e'
|| w[0] == 'i' || w[0] == 'o'
|| w[0] == 'u'
select word;
// execute the query.
foreach (var v in earlybirdquery)
\" starts with a vowel", v);
}// keep the console window open in debug mode.
console.writeline("press any key to exit.");
console.readkey();
}} /* output:
"a" starts with a vowel
"is" starts with a vowel
"a" starts with a vowel
"earned." starts with a vowel
"early" starts with a vowel
"is" starts with a vowel
*/
含義:提供乙個臨時標示符,充當對join、group或select子句的結果
如果您必須引用組操作的結果,可以使用 into 關鍵字來建立可進一步查詢的識別符號。 下面的查詢只返回那些包含兩個以上的客戶的組:
// custquery is an ienumerable>
var custquery =
from cust in customers
group cust by cust.city into custgroup
where custgroup.count() > 2
orderby custgroup.key
select custgroup;
LINQ八大基本子句
linq 的基本語法包含如下的 8個上下文關鍵字,這些關鍵字和具體的說明如下 八大子句 from.in子句 指定查詢操作的資料來源和範圍變數 select子句 指定查詢結果的型別和表現形式 where子句 篩選元素的邏輯條件,一般由邏輯運算子組成 group.by子句 對查詢進行分組 orderby...
LINQ查詢 八大基本子句
八大基本子句 from in 子句 指定查詢操作的資料來源和範圍變數 select子句 指定查詢結果的型別和表現形式 where子句 篩選元素的邏輯條件,一般由邏輯運算子組成 group子句 對查詢進行分組 order by子句 對查詢結果進行排序,可以為 公升序 或 降序 jion子句 連線多個查...
八大演算法思想
下面介紹一下最常用的八大演算法思想 一 比較 笨 的列舉演算法 基本思路 1 確定列舉物件 列舉範圍和判定條件 2 注意列舉可能的解,驗證每個節是否是問題的解 列舉演算法步驟 1 題解的可能範圍,補能遺漏任何乙個真正解,也要避免有重複 2 判斷是否真正解的方法 3 使可能解的範圍降至最小,以便提高解...