VB.net Linq选择不同

时间:2019-03-07 16:57:02

标签: vb.net linq

我在VB中的DataTable上使用Linq查询,我只想从5个项目的列表中带回唯一的表单名称和GUID: Full list of data being queried

我在查询中添加了.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个不同的行?

1 个答案:

答案 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