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是解決不了...