【问题标题】:How do I order a Group by and Order by a result using Linq如何使用 Linq 按结果排序 Group by 和 Order by
【发布时间】:2011-09-13 08:56:56
【问题描述】:

我有日期时间值(例如 12/01/2010 10:10:222..)我如何才能按 desc 顺序显示年份?例如,2011、2010、2009、2008 等。我需要按字段的年份部分分组并返回。我实际上需要返回年份和名称。我需要将名称用于其他功能,这就是我需要 2 个值的原因。

感谢您的帮助...

【问题讨论】:

  • “返回年份和名称”是什么意思?如果多个条目具有相同的名称怎么办?

标签: linq group-by sql-order-by


【解决方案1】:

你的意思不是很清楚,但你可能只是想要这样的东西:

var query = collection.GroupBy(record => record.DateProperty.Year)
                      .OrderBy(group => group.Key);

如果这不是您所追求的,请提供更多详细信息 - 最好是一些示例输入和所需的输出。

如果您只想要每个组中的一个条目,并且您乐于任意取一个来获得名称,并且您只想要年份,您可以这样做:

var query = collection.GroupBy(record => record.DateProperty.Year)
                      .Select(g => new { Year = g.Key, Name = g.First().Name })
                      .OrderBy(x => x.Year);

【讨论】:

    【解决方案2】:

    我会使用 Distinct 和 OrderByDescending 扩展:

    var years = IQueryableObject
                     .Distinct(x => x.Year).OrderByDescending(x => x.Year).ToList();
    

    【讨论】:

    • Distinct 不带参数说明如何区分它,因此无法编译。
    • 这对我有用:var sortedList = (from p in newsPressReleaseGenericList orderby p.ReleaseDate.Year 降序选择 new { ReleaseDate = p.ReleaseDate.Year }).Distinct();
    猜你喜欢
    • 2017-02-06
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2011-05-25
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    相关资源
    最近更新 更多