【问题标题】:LINQ - Group By multiple keys not giving desired resultsLINQ - 按多个键分组未给出预期结果
【发布时间】: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 关键字。我把它放进去就可以了。谢谢你也确认了这一点。

标签: vb.net linq group-by


【解决方案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()
                                        })

【讨论】:

  • 只是想知道为什么要对它进行排序;远端关心吗?如果不这样做,这是一个不必要的昂贵操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 2019-01-17
  • 2017-06-06
  • 1970-01-01
  • 2021-04-14
相关资源
最近更新 更多