【问题标题】:Linq: how to group by, max and orderbyLinq:如何分组,最大和排序
【发布时间】:2015-02-16 10:22:14
【问题描述】:

我有下表:

id   serialcode    timestamp
1       0001       01/02/2015
2       0001       02/02/2015
3       0001       03/02/2015
4       0002       03/02/2015

在 linq 中,我想获取单个(按分组)序列码的最大 ID。之后,我想为降序时间戳排序结果。

在这个例子中,首先,我想提取以下行:

id   serialcode    timestamp
3       0001       03/02/2015
4       0002       03/02/2015

然后我想以降序时间戳排序。 如何在 Linq 中实现这一点?

谢谢

【问题讨论】:

  • 你有什么尝试吗?
  • 如果有几行 id/max(serialcode) 相同但日期不同?

标签: c# sql .net linq


【解决方案1】:
db.Table.GroupBy(x => x.serialcode)
        .Select(g => g.OrderByDescending(x => x.id).First())
        .OrderByDescending(x => x.timestamp);

【讨论】:

  • 我在查询 db 时遇到 linq 翻译问题。我不得不做.Select(g => g.Max(x => x.Id))
【解决方案2】:

另一种方法是使用Max()函数:

var qry = from r in dt.AsEnumerable()
        group r by r.Field<string>("serialcode") into grp
        select new {
            id = grp.Max(a=>a.Field<int>("id")),
            serialcode = grp.Key,
            timestamp = grp.Max(a=>a.Field<DateTime>("timestamp"))
        };

结果(如预期):

id    serialcode    timestamp
3    0001            2015-02-03 00:00:00 
4    0002            2015-02-03 00:00:00 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多