2011-06-01 31 views
1

如何使用LINQ從現有列表中獲取新的不同列表?這是我到目前爲止所做的,並沒有區別,但確實給了我一個新名單。使用LINQ從現有列表(T)創建新的不同列表(T)使用LINQ

Dim tmpQryColumn = (From a In _allAudits 
        Select New CheckBoxListItem 
        With {.Id = a.AuditColumn, .Name = a.AuditColumn} 
        ).Distinct() 
_columnList = New List(Of CheckBoxListItem)(tmpQryColumn) 

回答

1

我懷疑問題是超載那CheckboxListItem不會覆蓋Equals/GetHashCode所以任何兩個實例是有效的不同。嘗試:

Dim columns = (From a In _allAudits 
       Select a.AuditColumn).Distinct() 

_columnList = (From column in columns 
       Select New CheckBoxListItem 
       With {.Id = column, .Name = column} 
       ).ToList() 

我敢肯定有一個在VB寫它的一個簡單的方法,但我不熟悉不夠的語法來寫。 C#版本將是:

_columnList = _allAudits.Select(x => x.AuditColumn) 
         .Distinct() 
         .Select(x => new CheckboxListItem { Id = x, Name = x }) 
         .ToList(); 
0

Distinct擴展方法依賴正確實現值相等的問題類型。在此失敗的最可能原因是CheckBoxListItem未根據IdName屬性實施相等性。

爲了解決這個問題做下列操作之一

  1. 實現平等語義CheckBoxListItem
  2. 創建IEqualityComparer<CheckBoxListItem>和使用Distinct這會佔用值