我在VB中的DataTable上使用Linq查询,我只想从5个项目的列表中带回唯一的表单名称和GUID:
我在查询中添加了.Distinct,但是它仍会带回图片中所示的重复结果。
Dim qry = (
From d In Data
Where d("FormGUID").ToString IsNot ""
Select New With {
.FormName = d("Form").ToString, #
.FormGUID = d("FormGUID").ToString}
).Distinct
如何仅选择2个不同的行?
答案 0 :(得分:2)
来自Anonymous Types (Visual Basic) - Equality
平等
仅当匿名类型的实例是实例时,它们才能相等 具有相同的匿名类型。编译器将两个实例视为 满足以下条件的相同类型的实例:
- 它们在同一程序集中声明。
它们的属性具有相同的名称,相同的推断类型,并且以相同的顺序声明。名称比较不是 区分大小写。
每个属性中的相同属性被标记为关键属性。
每个声明中至少有一个属性是键属性。
没有键属性的匿名类型的实例等于
因此,为了进行适当的相等性测试,请使您的匿名类型的字段为Key
ed 。
Dim qry = (
From d In Data
Where d("FormGUID").ToString IsNot ""
Select New With {
Key .FormName = d("Form").ToString,
Key .FormGUID = d("FormGUID").ToString}
).Distinct