具有多个参数的 LINQ 分组依据

  • 本文关键字:LINQ 参数 vb.net linq
  • 更新时间 :
  • 英文 :


我有一个 VB.NET 应用程序,想在多个列上执行分组依据。

类结构:

Public Class Person
   Public Property Name as String
   Public Property City as String
   Public Property Country as String
End Class
Dim oResult = PersonList _
                .GroupBy(Function(v) New With {v.City, v.Country}) _
               .Where(Function(grp) grp.Count > 1).ToList()

我有多个人记录,其中包含相同的城市名称和国家名称。但是上面的查询返回了零项。如果我只使用一列城市或国家,那么它工作正常。

Dim oResult = PersonList _
                .GroupBy(Function(v) v.City) _
               .Where(Function(grp) grp.Count > 1).ToList()

有人指出我在使用多个参数的 LINQ 查询中出错的地方。

问题是,在 VB 中,只有匿名类型中的Key属性用于相等和哈希。 (C# 匿名类型中的所有属性实际上是键属性。因此,您只需要将查询更改为:

Dim oResult = PersonList _
                .GroupBy(Function(v) New With { Key v.City, Key v.Country}) _
                .Where(Function(grp) grp.Count > 1).ToList()

有关更多详细信息,请参阅 VB 中匿名类型的文档。

Dim q1 = (From p In Repository.Table
                            Group p By p.CreatedDate.Year, p.CreatedDate.Month Into Group
                            Select New With {.Year = Year, .Month = Month, .Count = Group.Count()}).ToList

Dim q2 = (From p In Repository.Table
                            Group p By key = New With {.Year = p.CreatedDate.Year, .Month = p.CreatedDate.Month} Into Group
                            Select New With {.Year = key.Year, .Month = key.Month, .Count = Group.Count()}).ToList

相关内容

  • 没有找到相关文章

最新更新