【问题标题】:Linq GroupBy multiple fieldsLinq GroupBy 多个字段
【发布时间】:2013-01-24 07:51:25
【问题描述】:

我的列表中有以下项目:

Date          Amount    AnId     AnotherId    MainDate
2013/01/10    1000      1        5            2013/01/12
2013/01/11    2000      2        5            2013/01/12
2013/01/15    4000      1        5            2013/01/12

我想使用 linq 返回以下内容:

Date          Amount    AnId     AnotherId    MainDate
2013/01/11    2000      2        5            2013/01/12
2013/01/15    4000      1        5            2013/01/12

即对于特定的MainDate,我只想要在AnIdanotherId 中唯一的最新项目。因此,2013 年 1 月 10 日的项目被删除,因为同一 MainDateAnIdAnotherId 的项目的日期晚于项目日期...

我一直在尝试Group By MainDateThen By AnIdAnotherIdOrderByDescending 然后选择每个组的第一项,但对 linq 不太了解,所以我很挣扎......

【问题讨论】:

  • 请使用您尝试过的 Linq 和 lambdas 添加您的 C#/VB 代码,但没有得到您希望的结果。这样我们就更容易看出哪里出了问题。
  • Group By Multiple Columns 的可能重复项

标签: linq group-by


【解决方案1】:

在点符号中使用与查询表达式中相同的 anonymous 类型:

var qry = cust.GroupBy(cm => new { cm.MainDate, cm.AnId ,  cm.AnotherId })

参考:
How to Group By multiple columns in LINQ ?
LINQ Group By Multiple fields -Syntax help

【讨论】:

  • 谢谢!这将如何让我得到最新日期的项目?另外,如果我按上述方式分组,我如何让我的对象成为我的初始类型?例如它们是 MyClass 类型,分组后,我仍然希望它们是 MyClass 类型,只是过滤...
  • 如果你使用 .orderby(cm=>cm.Date).GroupBy(..) 会得到什么,然后从结果中获取第一组的第一个元素,这可能是你的最新元素..
  • 我有这样的东西:var test = containerList.OrderByDescending(t => t.Date).GroupBy(g => new { g.MainDate, g.AnId, g.AnotherId })。列表();我现在遇到的问题是如何为每个项目选择数据?即我想要每个分组的金额(不求和)......
  • 查看参考链接,它们应该对您有所帮助。
【解决方案2】:

使用 lambda 表达式可以编写

.GroupBy(e=>new { MainDate = e.MainDate, Id = e.AnId})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多