0

我在 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 个不同的行?

4

1 回答 1

2

匿名类型 (Visual Basic) - 平等

平等

只有当它们是相同匿名类型的实例时,匿名类型的实例才能相等。如果满足以下条件,编译器会将两个实例视为相同类型的实例:

  • 它们在同一个程序集中声明。
  • 它们的属性具有相同的名称、相同的推断类型,并且以相同的顺序声明。名称比较不区分大小写。

  • 每个中的相同属性都标记为关键属性。

  • 每个声明中至少有一个属性是关键属性。

没有键属性的匿名类型的实例仅与自身相同。

因此,为了进行适当的相等性测试,请将您的匿名类型的字段设置为Keyied

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
于 2019-03-07T18:23:55.813 回答