Linq 提示多列的不重複字段

2022-03-02 13:39:43 字數 1924 閱讀 9242

linq 用來實現集合(list, datatable等) 的二次操作十分簡便,這裡介紹下用 linq 對集合進行 distinct 操作的幾種方法。 

0. 準備資料: 

1. 使用groupby:對需要distinct的字段進行分組,取組內的第一條記錄這樣結果就是distinct的資料了。 

view plain

console.writeline(

"distinct1 by: a"

);  

var query1 = from e in

user.getdata()  

group e by new

into g  

select g.firstordefault();  

foreach

(var u 

inquery1)  

console.writeline(u.tostring());  

2. 使用distinct()擴充套件方法:需要實現iequalitycomparer介面。 

view plain

class

usercompare : iequalitycomparer

public

intgethashcode(user obj)  

}  view plain

console.writeline(

"distinct2 by: a,b"

);  

var compare = new

usercompare();  

var query2 = user.getdata().distinct(compare);  

foreach

(var u 

inquery2)  

console.writeline(u.tostring());  

上面的實現中要注意gethashcode()方法直接用obj.gethashcode()的話,distinct不能正常執行。

3. 自定義擴充套件方法distinctby(this ienumerable source, func keyselector)

view plain

public

static

class

myenumerableextensions  

}  }  }  

view plain

console.writeline(

"distinct3 by: a,b,c"

);  

var query3 = user.getdata().distinctby(x => new

);  

foreach

(var u 

inquery3)  

console.writeline(u.tostring());  

執行結果:

a   b   c   d

a2,b1,c1,d1

a1,b2,c1,d1

a1,b1,c1,d1

a1,b1,c2,d1

a1,b1,c1,d2

----------------

distinct1 by: a

a1,b1,c1,d1

a2,b1,c1,d1

----------------

distinct2 by: a,b

a1,b1,c1,d1

a2,b1,c1,d1

a1,b2,c1,d1

a1,b1,c2,d1

a1,b1,c1,d2

----------------

distinct3 by: a,b,c

a1,b1,c1,d1

a2,b1,c1,d1

a1,b2,c1,d1

a1,b1,c2,d1

---------------- 

mysql 查詢多列不重複的資料

語法 select distinct 列名稱 from 表名稱 如果要查詢某列完全不同的值,可以這樣用distinct。如果是多列呢?這時只用distinct明顯不能實現。比如 要查詢firstname和address完全不同的資料 想要查詢如下結果的資料 使用多列分組查詢則可以實現該查詢要求 se...

不特定列的不重複次數 公式解讀 統計不重複個數

小夥伴們好啊,今天咱們一起學習一下countif函式的高階應用,來看看如何使用這個函式完成不重複個數的統計。模式化的公式為 這個公式中包含了乙個數學邏輯 任意乙個資料重複出現n次,n個1 n的和值為1。公式中 countif a1 a10,a1 a10 部分是陣列計算,運算過程相當於 countif...

sql查處某字段不重複的全部記錄

下面舉例說明下,有表tb,欄位id,pdt id,caption,url。取出pdt id不重複的pdt id欄位的值很easy,distinct就可以解決問題。如 select distinct pdt id from tb 而要想取出pdt id不重複的所有的表中資訊,distinct是解決不了...