如何使用LINQ从现有列表中获取新的不同列表?这是我到目前为止所做的事情并没有区别,但确实给了我一个新的清单。
Dim tmpQryColumn = (From a In _allAudits
Select New CheckBoxListItem
With {.Id = a.AuditColumn, .Name = a.AuditColumn}
).Distinct()
_columnList = New List(Of CheckBoxListItem)(tmpQryColumn)
答案 0 :(得分: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();
答案 1 :(得分:0)
Distinct
扩展方法依赖于正确实现值相等的问题类型。它失败的最可能原因是CheckBoxListItem
没有基于Id
和Name
属性实现相等性。
要解决此问题,请执行以下操作之一
CheckBoxListItem
IEqualityComparer<CheckBoxListItem>
并使用Distinct
的重载来获取该值