出處:http://www.cnblogs.com/huangcong/archive/2010/12/29/1919817.html
本文章是我最近學習Linq的一些示例,分享給和我一樣剛開始接觸Linq的朋友們作為一個參考,因為是初學,肯定有很多不足,因此希望大家友善提醒,切勿針鋒相對,我會及時改正的~~
01.投影操作符(Select,SelectMany)
(1)Select操作符對單個序列或者集合中的值進行投影,可以控制從序列中返回指定的列.
方法語法:
代碼
查詢語法:
var query = from u in users select new { u.FirstName };
運行結果:
(2)SelectMany操作符提供了將多個from子句組合起來的功能,它將每個對象的結果合並成單個序列.
代碼
運行結果:
02.限制操作符(Where)
(1)Where是限制操作符,可以對序列中的值進行過濾.Where操作符不啟動查詢的執行.但開始對對象進行迭代的時候才將過濾器應用到數據上.
方法語法:
代碼
查詢語法:
var query = from n in names where n.StartsWith("S") select n;
運行結果:
03 排序操作符(OrderBy,OrderByDescending,ThenBy,ThenByDescending,Reverse)
(1)OrderBy/OrderByDescending操作符能將序列中的返回值按照升序/降序的順序進行排列.
方法語法:
代碼
查詢語法:
//正序
var query = from n in names orderby n select n;
//倒序
query = from n in names orderby n descending select n;
運行結果:
(2)ThenBy/ThenByDescending操作符可按照次關鍵對序列進行升序/降序排列.
方法語法:
代碼
查詢語法:
//正序
var query = from u in users orderby u.Name, u.Age select u;
//倒序
query = (from u in users orderby u.Name select u).ThenByDescending(u => u.Age);
運行結果:
(3)Reverse操作符只是簡單的把數據源中的數據按照相反的順序返回.(需要注意的是:Reverse在LINQ To SQL中是不支持的).
代碼
運行結果:
04 聯接操作符(join,GroupJoin)
(1)join操作符類似於T-SQL中的inner join,它可以將一個數據源與另一個數據源想聯接,根據兩個數據源中相等的值進行匹配.
方法語法:
代碼
查詢語法:
var query = from r in roles
join u in users on r.Id equals u.RoleId
where r.Id == 1
select new { RoleId = r.Id, RoleName = r.Name, UserName = u.Name };
運行結果:
(2)GroupJoin操作符類似於T-SQL中的INNER JOIN, LEFT OUTER JOIN,返回的是一個層級的結果集
代碼
運行結果:
05 分組操作符(GroupBy)
(1)GroupBy分組操作符是根據一個指定的特定值將序列中的值或元素進行分組.
代碼
運行結果:
06 串聯操作符(Concat)
(1)Concat操作符可以將兩個對象聯接在一起
代碼
運行結果:
07 聚合操作符(Aggregate,Average,Count,LongCount,Max,Min,Sum)
(1)聚合函數是在序列上執行特定的運算後返回單個值.共有7個聚合查詢操作符:
Aggregate:將序列中的值進行累積並返回結果.
Average:計算一個數值序列的平均值.
Count,LongCount:計算一個集合中元素的個數.但是前者返回的是Int32類型的值,後者為Int64
Max,Min:分別是返回序列中的最大值和最小值
Sum:返回集合中數值的總和
代碼
運行結果:
08 集合操作符(Distinct,Union,Intersect,Except)
(1)Distinct操作符可以刪除集合中重復的值,並返回該集合中不相同的元素.
代碼
運行結果:
(2)Union操作符可以取兩個集合的互不相同的所有數值.
代碼
運行結果:
(3)Intersect操作符可以返回兩個序列的交集.也就是返回同時存在於2個序列中的值.
代碼
運行結果:
(4)Except操作符可以返回兩個序列中不同的值.
代碼
運行結果:
09 生成操作符(Empty,Range,Repeat)
(1)Empty操作符可以返回一個指定類型的空集,通常用來作為聚合操作符的種子值.
代碼
運行結果:
(2)Range操作符可以創建一個連續數字序列的集合.
代碼
運行結果:
(3)Repeat操作符可以創建一個單值序列,可自定義重復的次數.
代碼
運行結果:
10 轉換操作符(Cast,OfType,ToArray,ToList,ToLookup)
(1)Cast操作符將查詢可以將IEnumerable中的元素轉換為指定的類型.
代碼
運行結果:
(2)OfType操作符可以對一個序列進行指定類型的過濾.
代碼
運行結果:
(3)ToArray/ToList操作符可以分別可以將序列創建為一個數組或者List<T>對象.需要注意的是進行轉換時會強制查詢立即執行,也就意味著查詢將於源數據斷開聯系.得到的序列為新創建的數組或List<T>.
代碼
運行結果:
(4)ToDictionary/ToLookUp可以將序列分別轉換為一對一的Dictionary<T Key,T Value>字典,或者一對多的LookUp<T Key,TElement Values>字典.
代碼
運行結果:
11 元素操作符(DefaultIfEmpty,ElementAt,ElementAtOrDefault,First,Last,FirstOrDefault,LastOrDefault,Single,SingleOrDefault)
(1)DefaultIfEmpty操作符將一個空集合替換為包含默認值的集合.
代碼
運行結果:
(2)ElementAt操作符返回集合中給定索引處的元素,如果索引超出范圍則會拋出一個index out of range的錯誤,如果不能確定索引范圍,應使用ElementAtOrDefault操作符,ElementAtOrDefault操作符會在索引超出范圍時返回一個默認值.
代碼
運行結果:
(3)First/Last操作符分別是返回集合中的第一個/最後一個元素,如果不確定是否有第一個或者最後一個值,可以使用FirstOrDefaule/LastOrDefault,它們分別會在First/Last操作符找不到元素的時候返回默認值.
代碼
運行結果:
(4)Single操作符可以從一個序列中返回唯一滿足某個特定條件的元素,如果找不到匹配的元素或者序列返回多個符合條件的元素,都會拋出異常.如果希望找不到元素時返回一個默認值,可以使用SingleOrDefault操作符.
代碼
運行結果:
12 相等操作符(SequenceEqual)
(1)SequenceEqual操作符可以判定兩個集合是否相等,返回值為Boolean值.
代碼
運行結果:
13 量詞操作符(All,Any)
(1)All操作符判斷集合中所有元素是否滿足特定的條件.如果均滿足返回True,否則False.
代碼
運行結果:
(2)Any操作符判斷集合中是否至少有一個元素滿足特定的條件.有則返回True,否則False.
代碼
運行結果:
14 分割操作符(Skip,SkipWhile,Take,TakeWhile)
(1)Skip操作符會跳過指定數量的元素後返回余下的元素,SkipWhile操作符則會通過特定的條件跳過一些元素,然後返回余下的元素.
代碼
運行結果:
(2)Take操作符會返回集合前面指定數量的元素,TakeWhile操作符則會通過特定的條件選取元素,如果某個元素不符合條件,則從該元素起的元素全部跳過.
代碼
運行結果:
小結
標准查詢操作符是LINQ查詢表達式的構成模塊,它們提供了許多查詢功能,目前我正在自學這些內容,在此把自己的學習成果分享一下,僅提供給初學者作為參考用,如果有錯誤的地方請高手指出,我盡快改正~~
主要是提供給Linq初學者參考之用
作者:黃聰
出處:http://www.cnblogs.com/huangcong/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
本文章是我最近學習Linq的一些示例,分享給和我一樣剛開始接觸Linq的朋友們作為一個參考,因為是初學,肯定有很多不足,因此希望大家友善提醒,切勿針鋒相對,我會及時改正的~~
01.投影操作符(Select,SelectMany)
(1)Select操作符對單個序列或者集合中的值進行投影,可以控制從序列中返回指定的列.
方法語法:
代碼
查詢語法:var query = from u in users select new { u.FirstName };
(2)SelectMany操作符提供了將多個from子句組合起來的功能,它將每個對象的結果合並成單個序列.
代碼
運行結果:
02.限制操作符(Where)
(1)Where是限制操作符,可以對序列中的值進行過濾.Where操作符不啟動查詢的執行.但開始對對象進行迭代的時候才將過濾器應用到數據上.
方法語法:
代碼
查詢語法:
var query = from n in names where n.StartsWith("S") select n;
運行結果:
03 排序操作符(OrderBy,OrderByDescending,ThenBy,ThenByDescending,Reverse)
(1)OrderBy/OrderByDescending操作符能將序列中的返回值按照升序/降序的順序進行排列.
方法語法:
代碼
查詢語法:
//正序 var query = from n in names orderby n select n; //倒序 query = from n in names orderby n descending select n;
運行結果:
(2)ThenBy/ThenByDescending操作符可按照次關鍵對序列進行升序/降序排列.
方法語法:
代碼
查詢語法:
//正序 var query = from u in users orderby u.Name, u.Age select u; //倒序 query = (from u in users orderby u.Name select u).ThenByDescending(u => u.Age);
運行結果:
(3)Reverse操作符只是簡單的把數據源中的數據按照相反的順序返回.(需要注意的是:Reverse在LINQ To SQL中是不支持的).
代碼
運行結果:
04 聯接操作符(join,GroupJoin)
(1)join操作符類似於T-SQL中的inner join,它可以將一個數據源與另一個數據源想聯接,根據兩個數據源中相等的值進行匹配.
方法語法:
代碼
查詢語法:
var query = from r in roles join u in users on r.Id equals u.RoleId where r.Id == 1 select new { RoleId = r.Id, RoleName = r.Name, UserName = u.Name };
運行結果:
(2)GroupJoin操作符類似於T-SQL中的INNER JOIN, LEFT OUTER JOIN,返回的是一個層級的結果集
代碼
運行結果:
05 分組操作符(GroupBy)
(1)GroupBy分組操作符是根據一個指定的特定值將序列中的值或元素進行分組.
代碼
運行結果:
06 串聯操作符(Concat)
(1)Concat操作符可以將兩個對象聯接在一起
代碼
運行結果:
07 聚合操作符(Aggregate,Average,Count,LongCount,Max,Min,Sum)
(1)聚合函數是在序列上執行特定的運算後返回單個值.共有7個聚合查詢操作符:
Aggregate:將序列中的值進行累積並返回結果.
Average:計算一個數值序列的平均值.
Count,LongCount:計算一個集合中元素的個數.但是前者返回的是Int32類型的值,後者為Int64
Max,Min:分別是返回序列中的最大值和最小值
Sum:返回集合中數值的總和
代碼
運行結果:
08 集合操作符(Distinct,Union,Intersect,Except)
(1)Distinct操作符可以刪除集合中重復的值,並返回該集合中不相同的元素.
代碼
運行結果:(2)Union操作符可以取兩個集合的互不相同的所有數值.
代碼
運行結果:
(3)Intersect操作符可以返回兩個序列的交集.也就是返回同時存在於2個序列中的值.
代碼
運行結果:
(4)Except操作符可以返回兩個序列中不同的值.
代碼
運行結果:
09 生成操作符(Empty,Range,Repeat)
(1)Empty操作符可以返回一個指定類型的空集,通常用來作為聚合操作符的種子值.
代碼
運行結果:
(2)Range操作符可以創建一個連續數字序列的集合.
代碼
運行結果:
(3)Repeat操作符可以創建一個單值序列,可自定義重復的次數.
代碼
運行結果:
10 轉換操作符(Cast,OfType,ToArray,ToList,ToLookup)
(1)Cast操作符將查詢可以將IEnumerable中的元素轉換為指定的類型.
代碼
運行結果:
(2)OfType操作符可以對一個序列進行指定類型的過濾.
代碼
運行結果:
(3)ToArray/ToList操作符可以分別可以將序列創建為一個數組或者List<T>對象.需要注意的是進行轉換時會強制查詢立即執行,也就意味著查詢將於源數據斷開聯系.得到的序列為新創建的數組或List<T>.
代碼
運行結果:
(4)ToDictionary/ToLookUp可以將序列分別轉換為一對一的Dictionary<T Key,T Value>字典,或者一對多的LookUp<T Key,TElement Values>字典.
代碼
運行結果:
11 元素操作符(DefaultIfEmpty,ElementAt,ElementAtOrDefault,First,Last,FirstOrDefault,LastOrDefault,Single,SingleOrDefault)
(1)DefaultIfEmpty操作符將一個空集合替換為包含默認值的集合.
代碼
運行結果:
(2)ElementAt操作符返回集合中給定索引處的元素,如果索引超出范圍則會拋出一個index out of range的錯誤,如果不能確定索引范圍,應使用ElementAtOrDefault操作符,ElementAtOrDefault操作符會在索引超出范圍時返回一個默認值.
代碼
運行結果:
(3)First/Last操作符分別是返回集合中的第一個/最後一個元素,如果不確定是否有第一個或者最後一個值,可以使用FirstOrDefaule/LastOrDefault,它們分別會在First/Last操作符找不到元素的時候返回默認值.
代碼
運行結果:
(4)Single操作符可以從一個序列中返回唯一滿足某個特定條件的元素,如果找不到匹配的元素或者序列返回多個符合條件的元素,都會拋出異常.如果希望找不到元素時返回一個默認值,可以使用SingleOrDefault操作符.
代碼
運行結果:
12 相等操作符(SequenceEqual)
(1)SequenceEqual操作符可以判定兩個集合是否相等,返回值為Boolean值.
代碼
運行結果:
13 量詞操作符(All,Any)
(1)All操作符判斷集合中所有元素是否滿足特定的條件.如果均滿足返回True,否則False.
代碼
運行結果:
(2)Any操作符判斷集合中是否至少有一個元素滿足特定的條件.有則返回True,否則False.
代碼
運行結果:
14 分割操作符(Skip,SkipWhile,Take,TakeWhile)
(1)Skip操作符會跳過指定數量的元素後返回余下的元素,SkipWhile操作符則會通過特定的條件跳過一些元素,然後返回余下的元素.
代碼
運行結果:
(2)Take操作符會返回集合前面指定數量的元素,TakeWhile操作符則會通過特定的條件選取元素,如果某個元素不符合條件,則從該元素起的元素全部跳過.
代碼
運行結果:
小結
標准查詢操作符是LINQ查詢表達式的構成模塊,它們提供了許多查詢功能,目前我正在自學這些內容,在此把自己的學習成果分享一下,僅提供給初學者作為參考用,如果有錯誤的地方請高手指出,我盡快改正~~
主要是提供給Linq初學者參考之用
作者:黃聰
出處:http://www.cnblogs.com/huangcong/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
出處:http://www.cnblogs.com/huangcong/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
沒有留言:
張貼留言