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 分組

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532921.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python tts 保存_Python 文件和目錄操作學習

文件與文件路徑文件有兩個關鍵屬性:文件名和路徑。路徑指明了文件在計算機上的位置。文件名中,最后一個句點之后的部分稱為文件的“擴展名”,它指出了文件的類型目錄也叫文件夾,文件夾可以包含文件和其他文件夾路徑分隔符在 Windo…

圖片 過度曝光_解讀:攝影初學者,如何理性處理“曝光不足”與“曝光過度”...

曝光是攝影的基本要素之一,但是許多攝影初學者在曝光不足和過度曝光的問題上經常會遇到很多的困擾,甚至完全不知道如何處理這些問題。其實知道如何獲得正確的曝光,并不是你了解曝光過度和曝光不足照片區別的唯一原因。因為創造性的表達比技術…

win7電腦誤刪鼠標鍵盤驅動_鼠標鍵盤,教您怎么解決鍵盤和鼠標失靈的問題

有的時候在我們使用電腦的過程中會突然間有鍵盤鼠標失靈的情況發生,而我們都是不明所以、不知所措的。對此,小編我給你們找了解決方法。接下來,就讓我們一起往下看看關于鍵盤鼠標失靈的解決方法吧。鍵盤和鼠標都是電腦的重要組成部分&#xf…

airpods刪除別人的配對_怎么不讓別人連我的airpods

airpods很容易就被朋友拿混了,到時候分不清自己的airpods耳機是一件很尷尬的事情。那么,airpods如何避免和別人混拿?不拿出來是最好的解決辦法,也可以提前設置不讓別人連我的airpods,這樣是最靠譜的方法。怎么不讓別人…

jmeter安裝包雙擊沒反應_windows環境下Jmeter5.2的安裝使用

標簽:target 首頁 環境變量 百度搜索 bsp nbsp htm targe oracl一、安裝配置JDKJmeter5.2依賴JDK1.8 版本,JDK安裝百度搜索JAVA下載JDK,地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht…

php把中文寫入mysql_php寫入mysql中文亂碼的實例解決方法

php寫入mysql出現中文亂碼的解決辦法是:在建立數據庫連接之后,將該連接的編碼方式改為中文。代碼如下:$linkIDmysql_connect("localhost","root","admin");if(!$linkID){echo "數據庫連接失敗&#xff01…

mysql 導入.sql文件_MySQL導入.sql文件及常用命令

MySQL導入.sql文件及常用命令在MySQL Qurey Brower中直接導入*.sql腳本,是不能一次執行多條sql命令的,在mysql中執行sql文件的命令:mysql> source d:/myprogram/database/db.sql;另附mysql常用命令:一) 連接MYSQL&#xff…

mysql ubuntu 17.04_1、mysql 5.7 ubuntu17.04

系統:ubuntu17.04數據庫主要分文檔型和服務型兩類:文檔型:如sqlite3 (17.04自帶/usr/bin/sqlite3)就是一個文件,應用在移動端如手機,pad,家電等服務型:如mysql有服務端(存儲數據)和客戶端mysql數…

mysql 查詢倒數第二條記錄_MySQL查詢倒數第二條記錄實現方法

有時候會用到查詢倒數第二條記錄lastHolderChangeHistory.find_by_sql([" SELECT * FROM holder_change_historieswhere treasure_id ?order by id desclimit 1,1 ",hch.treasure_id])select *from tablename awhere (select count(*)f…

kafka和mysql內存機制_一文五分鐘讓你徹底理解Kafka架構原理

對于kafka的架構原理我們先提出幾個問題?1.Kafka的topic和分區內部是如何存儲的,有什么特點?2.與傳統的消息系統相比,Kafka的消費模型有什么優點?3.Kafka如何實現分布式的數據存儲與數據讀取?一、Kafka架構圖1.kafka名詞解釋在一套kafka架構中有多個P…

centos mysql 互為主從_centos7 mysql互為主從+keepalived

一、互為主從配置1.1、資源情況192.168.11.177 server1192.168.11.180 server2192.168.11.210 VIP1.2、server1配置# vi /etc/my.cnf[mysqld]server-id1log-binmysql-binrelay_logmysql-realy-binrelay_log_indexslave-mysql-realy-bin.indexexpire_logs_days15binlog_formatmi…

手機apk簽名工具安卓版_小飛魚APK簽名工具使用方法

小飛魚APK簽名工具是小飛魚旗下的一款APK簽名軟件。是移動開發者必備的一款軟件。使用方法1、雙擊運行小飛魚APK簽名工具.exe文件,出現如下界面:2、點擊“功能”,沒有簽名證書的選擇證書制作,制作完證書再選擇APK簽名,有證書的直接…

React 路由傳參

引言 在上一篇中&#xff0c;我們學習了 React 中使用路由技術&#xff0c;以及如何使用 MyNavLink 去優化使用路由時的代碼冗余的情況。 這一節我們繼續上一篇 React 路由進行一些補充 1. Switch 解決相同路徑問題 首先我們看一段這樣的代碼 <Route path"/home&q…

mysql 5.5 client 字符集_rhel4 mysql5.5 字符集_character set

和oracle字符集一樣,有些暈,太細了小結:1,字符集分為:服務器,數據庫,表,連接,列等對應參數為:mysql> show variables like chara%;------------------------------------------------------| Variable_name | Value |---------------------…

mysql heartbeat lvs_mysql+heartbeat+DRBD+LVS實現mysql高可用二

上一節&#xff0c;講述了DRBD的安裝&#xff0c;因為要利用heartbeatDRBDmysql實現mysql的高可用&#xff0c;所以這一節講述安裝mysql和heartbeat的安裝分別在各個節點安裝mysql&#xff0c;文本使用的是二進制的安裝包mysql-5.5.33-linux2.6-x86_64.tar.gz[rootdrbd1 usr]# …

mysql 嵌入式 性能_database – 在mySQL中優化嵌入式SELECT查詢

好的,這是我現在正在運行的一個查詢,它有45,000條記錄,大小為65MB ……并且即將變得越來越大(所以我也要考慮未來的性能)&#xff1a;SELECT count(payment_id) as signup_count,sum(amount) as signup_amountFROM payments pWHERE tm_completed BETWEEN 2009-05-01 AND 2009-0…

mysql執行語句后回退_MySQL命令學習筆記(八)

1 安全管理1.1 訪問控制MySQL服務器的安全基礎是&#xff1a; 用戶應該對他們需要的數據具有適當的訪問權&#xff0c;既不能多也不能少1.2 管理用戶MySQL用戶賬號和信息存儲在名為mysql的MySQL數據庫中。獲得所有用戶賬號列表時&#xff0c;可使用以下代碼&#xff1a;USE mys…

mysql怎樣dao出數據庫_mysql怎么導出數據庫?

mysql怎么導出數據庫&#xff1f;下面本篇文章就來給大家介紹3種mysql導出數據庫的方法&#xff0c;希望對你們有所幫助。mysql導出數據庫的方法&#xff1a;方法一cmd 到mysql bin目錄下用如下命令&#xff1a;mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-…

mac 安裝mysql怎么卸載不干凈_CleanMyMac卸載不干凈怎么辦?如何徹底刪除Mac上的CleanMyMac?...

CleanMyMac for mac是非常受歡迎的系統清理、軟件卸載軟件&#xff0c;但是想要卸載CleanMyMac的有些用戶發現不能完全卸載&#xff0c;那么CleanMyMac卸載不干凈怎么辦&#xff1f;如何徹底刪除CleanMyMac&#xff1f;這里帶來兩種可以徹底刪除CleanMyMac的方法&#xff0c;有…

mysql判斷是否為null_MySQL如何判斷字段是否為null

相信很多用了MySQL很久的人,對這兩個字段屬性的概念還不是很清楚,一般會有以下疑問: 我字段類型是not null,為什么我可以插入空值 為什么not null的效率比null高 判斷字段不為空的時候,到底要 select * from table where column <> 還是要用 select * from table w…