LINQ使用多个键执行GroupBy分组未得到预期结果的问题求助
你的代码问题出在VB.NET匿名类型的属性默认不参与等值比较,GroupBy分组时会把两个属性值完全相同的匿名对象判定为不同的键,导致分组拆分不符合预期。
只需要在匿名类型的两个分组属性前加上Key关键字,标记这两个属性为键属性,参与等值比较和哈希码计算即可,修正后的代码如下:
Dim uploads = items.GroupBy(Function(g) New With {Key g.CategoryId, Key g.TypeId}) _ .OrderBy(Function(g) g.Key.CategoryId) _ .ThenBy(Function(g) g.Key.TypeId) _ .Select(Function(g) New UploadListItemViewModel With { .CategoryId = g.Key.CategoryId, .TypeId = g.Key.TypeId, .Uploads = g.ToList() })
修改后GroupBy会逐位对比两个键的属性值,相同CategoryId和TypeId的条目会被合并到同一分组,你提到的Category 1 / Type 8分组的条目数量就会恢复为预期的3条。
内容的提问来源于stack exchange,提问作者neilsbennett
相关产品推荐
相关产品推荐

