LINQ - 按多个键分组未给出预期结果
Posted
技术标签:
【中文标题】LINQ - 按多个键分组未给出预期结果【英文标题】:LINQ - Group By multiple keys not giving desired results 【发布时间】:2021-10-20 09:09:40 【问题描述】:我正在尝试使用 Linq 按多个键进行分组。
我有一个 Category Id 和一个与之关联的 Type Id,然后是一个与 Type Id 关联的项目列表。
从我的结果中可以看出,它们没有被分组。
这是我正在使用的查询:
Dim uploads = items.GroupBy(Function(g) New With g.CategoryId, 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()
)
这是结果视图
例如对于 Category 1 / Type 8 ,上传计数应为 3
如果我做错了什么,我们将不胜感激。
【问题讨论】:
Key .Uploads
是错字吗?
为什么是错字?是不是因为某种原因错了?
您在组选择器 (New With Key g.CategoryId, Key g.TypeId)
) 中缺少 Key
关键字。没有它,分组就无法工作。我假设Uploads
是一个整数,所以你应该在那里有.Uploads = g.Sum(Function(m) m.Uploads)
。否则,发布类模型。
@Jimi 我刚刚发现我也缺少来自另一个来源的 Key
关键字。我把它放进去就可以了。谢谢你也确认了这一点。
【参考方案1】:
在组选择器中缺少 Key
关键字。
最终固定代码是
Dim uploads = items.GroupBy(Function(x) New With Key x.CategoryId, Key x.TypeId) _
.OrderBy(Function(x) x.Key.CategoryId) _
.ThenBy(Function(x) x.Key.TypeId) _
.Select(Function(g) New SKUProductUploadListItemViewModel With
.CategoryId = g.Key.CategoryId,
.TypeId = g.Key.TypeId,
.Uploads = g.ToList()
)
【讨论】:
只是想知道为什么要对它进行排序;远端关心吗?如果不这样做,这是一个不必要的昂贵操作以上是关于LINQ - 按多个键分组未给出预期结果的主要内容,如果未能解决你的问题,请参考以下文章