2011-08-31 63 views
3

這裏是我在嘗試獲取項目的不同列表...使用Linq列表時沒有得到不同的項目?

var queryResults = PatientList.Distinct(); 
    PatientList = queryResults.ToList<SelectListItem>(); 

出於某種原因,我不及彼明顯的列表。

+0

可能的重複[獨特不使用LINQ到對象](http://stackoverflow.com/questions/1365748/distinct-not-working-with-linq-to-objects) – dlev

回答

8

使用

var queryResults = PatientList.GroupBy(x=>x.Id).Select(x=>x.FirstOrDefault()) 
    PatientList = queryResults.ToList<SelectListItem>(); 

你總是可以嘗試

PatientList = PatientList.GroupBy(x=>x.Id).Select(x=>x.FirstOrDefault()).ToList<SelectListItem>(); 

它會給你基於關閉不同的結果,不管你按

退房http://blog.jordanterrell.com/post/LINQ-Distinct()-does-not-work-as-expected.aspx

另外一個問題供參考:Returning a Distinct IQueryable with LINQ?

+0

方法yadda yadda的類型實參不能從用法推斷。嘗試明確指定類型參數。 – SoftwareSavant

+0

@DmainEvent,將x.Id更改爲您需要將所有內容分組的所有內容。不確定你的評論是什麼意思,哪個論點不能被推斷? – Gage

+0

抱歉。我現在正在使用另一臺計算機來處理這個消息,而不是那個有代碼的計算機(今天早上小懶惰:-))。但我確實把它改成了正確的值......不知道它爲什麼不起作用。 – SoftwareSavant

1

不知道你的PatientList包含什麼樣的項目,但我想你必須在你的自定義對象上實現IEquatable。

此之前,這裏已經aswered: Distinct not working with LINQ to Objects

+1

如果您在對象中實現它這將是IEquatable,而不是IEqualityComparer ... –

+0

它實際上是SelectListItem的列表 – SoftwareSavant

+0

'IEquatable '*:D –

1

SelectListItem類需要重寫EqualsGetHashCode(和選擇實現IEquatable<SelectListItem>)。否則,具有相同值的不同實例將被視爲不同。

另一種選擇是執行IEqualityComparer<SelectListItem>並將其作爲第二個參數傳遞給Distinct

相關問題