日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

distinct返回null报错_C#之集合常用扩展方法与Linq

發布時間:2025/3/8 C# 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 distinct返回null报错_C#之集合常用扩展方法与Linq 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、集合的常用擴展方法(lambda的方式)

1.Where() 根據條件選擇數據

2.Select() 根據數據條件轉換成新的數據類型,類似于DTO轉換類

3.Max() 根據條件選擇最大值

4.Min() 根據條件選擇最小值

5.OrderBy() 根據條件升序排序

如果升序中Id都為1,那么就根據第二個條件進行升序排序,使用ThenBy

ThenByDescending()緊接著倒序排序

6.First() 獲取第一個(如果不存在則報錯)

7.FirstOrDefault() 獲取第一個,如果不存在則返回null或默認值

8.Single() 獲取唯一一個,如果沒有或者多個則報異常

9.SingleOrDefault() 獲取唯一一個,如果沒有則返回默認值,如果多個則報錯

10.Any() 判斷集合中是否包含元素,如果有返回true,否則返回false。一般比Count效率高。因為Any()只要查詢到數據就返回,Count是統計數據的數量。Any還可以指定條件表達式。

11.Distinct() 去除重復數據

(1)int類型的集合:List。

(2)string類型的集合:List

(3)對于自定義類的集合去重復

使用Linq中Distinct方法內進行比較的是對象引用,判斷的是對象是否引用同一個對象,而不是對象的屬性。因此我們使用對象集合使用Distinct方法時要使用重載

Distinct(this IEnumerable source, IEqualityComparer comparer);

要使用這個方法,重寫IEqualityComparer接口,再使用Distinct方法:

由于直接獲取對象的HashCode,用HashCode進行比較的速度比Equals方法更快,因此IEqualityComparer內部會再使用Equals前先使用GetHashCode方法,再兩個對象的HashCode都相同時即判斷對象相同。

而當兩個對象HashCode不相同時,Equals方法就會被調用,對要比較的對象進行判斷。由于在List集合中兩個引用實際上是兩個不同的對象,因此HashCode必定不相同,所以要觸發Equals方法,只需要改GetHashCode,讓它返回相同的常量。

12.Skip(n)跳過前n條數據,Take(m)獲取最多m條數據,如果不足m條也不會報錯。

13.Except(item1) 排除當前集合中在item1中存在的數據。

如果是自定義集合,需要同Distinct方法一樣實現IEqualityComparer接口

14.Union(item1)把當前集合和item中元素組合(求并集)

自定義集合實現IEqualityComparer

15.Intersect(item1) 把當前集合和item中元素求交集

16.GroupBy() 分組(其中Key值是分組返回值)

按照string類型進行返回值

17.SelectMany() 把集合中每個對象的集合屬性的值重新拼接為一個新的集合(不能去除重復數據)

18.Join() 聯合查詢(可以查詢兩個表某個屬性相同的數據)

使用擴展方法,本人只找到添加一個條件查詢,沒有找到添加多個條件查詢,但是使用Linq方式的Join可以使用添加多個條件查詢。

二、Linq寫法

上面介紹的是lambda的方式寫的,下面介紹的是Linq的寫法。兩種方法可以相互替代,沒有哪個好哪個壞的區別。在編譯器編譯的時候,使用Linq的寫法最終都被編譯成了lambda的方式的寫法(通過反編譯工具可以看出)

建議:需要join等復雜用法的時候Linq更易懂,一般的時候lambda方式的寫法更清晰、緊湊。同時這兩種寫法可以混合書寫。

必須是:from 變量 in 集合,并且是select xxx結尾

1.Where(s=>s.Id>2)寫法:

2.Select(s=>new GetData(){Id=s.Id,Name=s.Name})寫法:

3.OrderBy(s=>s.Id). ThenBy(s=>s.Name.Length);寫法

4.Join聯合查詢(兩個集合的條件判斷相等不能使用”==”,而是使用equals)

一個條件的聯合查詢

多個條件查詢

5.group by 分組

總結

以上是生活随笔為你收集整理的distinct返回null报错_C#之集合常用扩展方法与Linq的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。