LINQ(Language Integrated Query)是.NET Framework中用于數據查詢的組件,它將查詢功能集成到C#等.NET語言中。LINQ提供了豐富的查詢操作符,這些操作符可以應用于各種數據源,如內存中的集合、數據庫、XML等。以下是一些LINQ的常用方法:
目錄
1. 基本查詢方法
2. 元素選擇與投影
3. 分頁與跳過元素
4. 排序
5. 集合操作
6. 分組與去重
7. 轉換與聚合
8. 特定操作
1. 基本查詢方法
- Where:用于限定輸入集合中的元素,將符合條件的元素組織成一個序列結果。
- Select:用于根據輸入序列中的元素創建相應的輸出序列中的元素,輸出序列中的元素類型可以與輸入序列中的元素類型相同,也可以不同。
- SelectMany:與Select類似,但可以根據輸入序列中的每一個元素,在輸出序列中創建相應的零個或多個元素。
2. 元素選擇與投影
- First/FirstOrDefault:返回序列中的第一個元素,FirstOrDefault在序列為空時返回默認值(對于引用類型為null,對于值類型為該類型的默認值)。
- Single/SingleOrDefault:返回序列中的唯一元素,如果序列為空或包含多個元素,則Single會拋出異常,而SingleOrDefault在序列為空時返回默認值。
3. 分頁與跳過元素
- Take:從輸入序列中返回指定數量的元素,常用于分頁。
- Skip:從輸入序列中跳過指定數量的元素,返回由序列中剩余的元素所組成的新序列。
- SkipWhile:從輸入序列中跳過滿足一定條件指定數量的元素。
4. 排序
- OrderBy:對輸入序列中的元素進行排序,基于一個委托方法的返回值順序。
- OrderByDescending:與OrderBy類似,但按降序排序。
- ThenBy和ThenByDescending:用于在OrderBy或OrderByDescending之后,根據另一個條件對序列進行進一步排序。
5. 集合操作
- Concat:連接兩個序列,生成一個新序列。
- Union:將兩個序列中的元素合并成一個新的序列,新序列將自動去除重復的元素。
- Intersect:將兩個輸入序列中的重復元素挑選出來,生成一個新的集合,即求交集。
- Except:返回兩個序列中存在于第一個序列但不存在于第二個序列的元素所組成的新序列。
6. 分組與去重
- GroupBy:類似于SQL語言中的Group By語句,用于將輸入序列中的元素進行分組。
- Distinct:類似于SQL語句中的Distinct語句,用于去除一個序列中的重復元素。
7. 轉換與聚合
- Cast:將一個類型為IEnumerable的集合對象轉換為IEnumerable<T>類型的集合對象。
- OfType:與Cast類似,但更加安全,僅會將能夠成功轉換的元素進行轉換。
- AsEnumerable:將一個實現了IEnumerable<T>接口的對象轉換成一個標準的IEnumerable<T>接口對象。
- Aggregate:對序列中的元素進行累積操作,如求和、求積等。
8. 特定操作
- Join:類似于SQL語句中的Join語句,用于連接兩個輸入序列。
- GroupJoin:也用于連接兩個輸入序列,但與Join不同,它允許將outer序列元素與對應的inner序列元素作為組一次性處理。
- Reverse:生成一個與輸入序列中元素相同,但元素排列順序相反的新序列。
LINQ的這些常用方法使得在.NET中查詢和處理數據變得更加靈活和強大。它們可以被組合使用,以構建復雜的查詢邏輯,滿足各種數據處理需求。
例:用linq表達式查找一個集合元素不包含另一個集合元素
假設你有兩個集合,每個集合的元素都是具有多個屬性的對象,比如Person
對象,它們都有Name
和Age
屬性。你想要從mainSet
中篩選出那些Name
和Age
都不與excludedSet
中任何Person
的Name
和Age
相匹配的人。
var filteredSet = mainSet.Where(p => !excludedSet.Any(ep => ep.Name == p.Name && ep.Age == p.Age)).ToList();?