LINQ分組取出第一條資料

2021-09-25 03:36:35 字數 867 閱讀 4163

person1: id=1, name=「test1」

person2: id=1, name=「test1」

person3: id=2, name=「test2」

以上list如果直接使用distinct方法進行過濾,仍然返回3條資料,而需要的結果是2條資料。下面給出解這個問題的方法:

方法1: distinct 方法中使用的相等比較器。這個比較器需要重寫equals和gethashcode方法,個人不推薦,感覺較麻煩,需要些多餘的類,並且用起來還要例項化乙個比較器,當然自己也可以寫乙個泛型的比較器生成工廠用來專門生成比較器,但仍然覺得較麻煩。

msdn給出的做法,具體參照:
方法2:自己擴充套件乙個distinctby。這個擴充套件方法還是很不錯的,用起來很簡潔,適合為框架新增的distinct擴充套件方法。

public static ienumerable distinctby(this ienumerable source, funckeyselector)}}

使用方法如下(針對id,和name進行distinct):

var query = people.distinctby(p => new );

若僅僅針對id進行distinct:

var query = people.distinctby(p => p.id);

方法3:通過groupby分組後,並取出第一條資料。簡單易用,很方便。這是一種迂迴策略,**理解起來沒有distinct表意清晰,雖然實現了效果。

list distinctpeople = allpeople

.groupby(p => new )

.select(g => g.first())

.tolist();

mongodb 分組 得到第一條資料

業務邏輯 控制器每分鐘上報採集資料,現需得到每個控制器的每種採集資料的最近一條資料 效能比較低。分組,得到每個控制器每種採集型別的離當前最近的一條記錄 private static void group if curr.createdate result.createdate string fina...

Group By 分組並取第一條資料

mysql 我使用排序進行篩選,保證分組 排序之後我的第一條資料就是我要的資料 select a.code a.type as 班型 max a.num from select from cent ylb numclass group by code,type order by code,num d...

Oracle分組,取每個分組的第一條資料

最近有個有個業務需求 springboot專案集合mybatis 需要查詢分組後,取每組的第一條資料 oracle資料庫 可以在業務 中實現,但是過於繁瑣,後來查閱oracle的函式,得出僅僅在sql中即可實現,非常簡潔,簡化 sql如下 select from select t user.row ...