linq Distinct的乙個簡單實現方法

2021-09-30 09:57:32 字數 2311 閱讀 8379

linq distinct  

ienumerable> query1 = from e in jv

group e by new into g

select g.tolist();

這段**可以得到乙個范型的集合(根據reportid分組後的范型集合),通過foreach能夠取出進行操作。

foreach (listreportnames in query1)

emptylist.add(reportnametemp);

}

參考文章:

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

0. 準備資料: 

+ expand source

view plain

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

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

乙個乙個的輸入資料

有兩個需要注意的點 1.while中的內容 whlie ch getchar 0 ch eof 注意這兩個書寫的形式是不一樣的 2.while中就不用再寫getchar了,因為while中本身就有ch getchar 輸入描述 一行,字串行,包含a或b,輸入以字元0結束。輸出描述 一行,乙個字元,a...

乙個決定,乙個轉折

距離2012年9月已經是第四個年頭,對於我,我想這是我這輩子做的第一件我很自豪,很開心的乙個決定,從生物轉向計算機,一直以來,我對自己的期望總是很高,比如說上高中的時候,希望自己至少考個二本,學習個自己喜歡的專業,然後為之奮鬥,有乙個非常激動人心的大學四年,再比如說以後賺很多很多錢,擁有屬於自己的公...

關於乙個加法優化的乙個地方

include include include base.h int main int argc,char argv,char envp 下面是彙編 01291000 55 push ebp 01291001 8bec mov ebp,esp 01291003 56 push esi 0129100...