網站首頁 編程語言 正文
LINQ查詢時有兩種語法可供選擇:查詢表達式語法(Query Expression)和方法語法(Fluent Syntax)。
一、查詢表達式語法
查詢表達式語法是一種更接近SQL語法的查詢方式。
LINQ查詢表達式語法如下:
fromin or IQueryable Collection>
LINQ查詢表達式
約束 | LINQ查詢表達式必須以from子句開頭,以select或group子句介紹 |
關鍵字 | 功能 |
from....in... | 指定要查詢的數據源以及范圍變量,多個from子句則表示從多個數據源查找數據。注意:C#編譯器會把“復合from子句”的查詢表達式轉換為SelectMany()擴展方法。 |
join…in…on…equals… | 指定多個數據源的關聯方式 |
let | 引入用于存儲查詢表達式中子表達式結果的范圍變量。通常能達到層次感會更好,使代碼更易于閱讀。 |
orderby、descending | 指定元素的排序字段和排序方式。當有多個排序字段時,由字段順序確定主次關系,可指定升序和降序兩種排序方式 |
where | 指定元素的篩選條件。多個where子句則表示了并列條件,必須全部都滿足才能入選。每個where子句可以使用謂詞&&、||連接多個條件表達式。 |
group | 指定元素的分組字段。 |
select | 指定查詢要返回的目標數據,可以指定任何類型,甚至是匿名類型。(目前通常被指定為匿名類型) |
into | ? 提供一個臨時的標識符。該標識可以引用join、group和select子句的結果。 1)????????直接出現在join子句之后的into關鍵字會被翻譯為GroupJoin。(into之前的查詢變量可以繼續使用) 2)????????select或group子句之后的into它會重新開始一個查詢,讓我們可以繼續引入where, orderby和select子句,它是對分步構建查詢表達式的一種簡寫方式。(into之前的查詢變量都不可再使用) |
查詢語法從一個From子句開始,然后是一個Range變量。 From子句的結構類似于“From rangeVariableName in IEnumerablecollection”。 在英語中,這意味著,從集合中的每個對象。 它類似于foreach循環:foreach(student in studentList)。
在From子句之后,您可以使用不同的標準查詢運算符來過濾,分組,連接集合的元素。 LINQ中有大約50個標準查詢運算符。標準查詢運算符后面通常跟一個條件,這個條件通常使用lambda表達式來表示。
LINQ查詢語法總是以Select或Group子句結束。 Select子句用于對數據進行整形。 您可以選擇整個對象,因為它是或只有它的一些屬性。 在上面的例子中,我們選擇了每個結果字符串元素。
例如:我們要從數組中查詢出偶數,查詢表達式示例代碼如下:
var result = from p in ints where p % 2 == 0 select p;
查詢表達式語法要點總結:
1、查詢表達式語法與SQL(結構查詢語言)語法相同。
2、查詢語法必須以from子句開頭,可以以Select或GroupBy子句結束?。
3、使用各種其他操作,如過濾,連接,分組,排序運算符以構造所需的結果。
4、隱式類型變量 - var可以用于保存LINQ查詢的結果。
二、方法語法
方法語法(也稱為流利語法)主要利用System.Linq.Enumerable類中定義的擴展方法和Lambda表達式方式進行查詢,類似于如何調用任何類的擴展方法。
以下是一個示例LINQ方法語法的查詢,返回數組中的偶數:
var result = ints.Where(p => p % 2 == 0).ToArray();
從上面的示例代碼中可以看出:方法語法包括擴展方法和Lambda表達式。 擴展方法Where()在Enumerable類中定義。
如果你檢查Where擴展方法的簽名,你會發現Where方法接受一個謂詞委托,如Func
三、查詢表達式語法VS方法語法
查詢表達式語法與方法語法存在著緊密的關系
1、CLR本身并不理解查詢表達式語法,它只理解方法語法。
2、編譯器負責在編譯時將查詢表達式語法翻譯為方法語法。
3、大部分方法語法都有對應的查詢表達式語法形式:如Select()對應select、OrderBy()對應orderby
4、部分查詢方法目前在C#中還沒有對應的查詢語句:如Count()和Max(),這是只能采用以下替代方案:
方法語法
查詢表達式語法+方法語法的混合方式
原文鏈接:https://www.cnblogs.com/dotnet261010/p/8279256.html
相關推薦
- 2022-07-21 數據庫慢查詢介紹并優化
- 2022-03-30 Android?Room數據庫加密詳解_Android
- 2022-03-11 Linux fatal error: iostream: No such file or direc
- 2022-03-05 C#多線程用法詳解_C#教程
- 2021-12-05 密碼學之apache部署https介紹_Linux
- 2022-04-07 對WPF中Expander控件美化_實用技巧
- 2022-08-03 Android開發手冊Chip監聽及ChipGroup監聽_Android
- 2022-12-13 Android?DataBinding單向數據綁定深入探究_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支