如何在linq中将不同的结果返回到集合中

时间:2014-07-21 17:36:19

标签: vb.net linq linq-to-entities linq-to-objects

以下查询结果重复类代码。

cboFilterValues.DataSource = (From i In allDetails Select New LookUpItem With {.ItemText = i.ClassCode, .ItemValue = i.ClassCode} Distinct).ToList()

任何人都可以建议我如何为上述查询获得不同的结果。我需要将结果集设置为IList(Of LookupItems)

谢谢

2 个答案:

答案 0 :(得分:1)

您的Distinct无效,因为(大概是 - 您没有提供代码),您没有覆盖Equals中的GetHashCodeLookUpItem方法class,因此使用引用相等性来比较实例。如果您实现这些方法,则Distinct应该起作用:

Public Overrides Function Equals(o As Object) As Boolean
    If o Is Nothing OrElse Not Me.GetType().Equals(o.GetType()) Then Return False
    Dim other = DirectCast(o, LookUpItem)
    Return Me.ItemText = other.ItemText ' or some other fields
End Function

Public Overrides Function GetHashCode() As Integer
    Return Me.ItemText.GetHashCode() ' or some other fields
End Function

或者,您可以稍微修改一下您的查询,因为您只使用ClassCode中的allDetails属性,并将其放在那里(假设ClassCode是{{1}使用值相等的其他东西):

String

答案 1 :(得分:0)

cboFilterValues.DataSource = (From x In (From i In allDetails Select i Distinct) Select New LookUpItem With {.ItemText = x.ClassCode, .ItemValue = x.ClassCode}).Tolist

我假设你上面的东西因为select new的一些问题而无法正常工作,如果这是问题就应该绕过它。 添