【问题标题】:SQL in Linq: Group & Max for every columnLinq 中的 SQL:每列的组和最大值
【发布时间】:2017-01-05 13:53:01
【问题描述】:

我要把这条 SQL 语句转换成 Linq:

select id, workerId, max(timestamp) as Datex, clientId from order where clientId = '123' group by workerId;

它使用表格顺序的每一列创建一个表格。但它只显示 clientID=123 的行并按工人分组。它只显示最新条目(最大时间戳)

如何将其传输到 Linq?我什么都试过了。例如,这不起作用:

var selectedOrder = from s in order
                    where s.clientID == "123"
                    group s by s.workerId into g
                    select new {  id = s.id, workerId = g.Key, Datex = g.Max(s => s.timestamp), s.clientID};

更新:

  1. 我想给你举个例子:
id: 1   workerId: 162   Datex: 2014-11-13   clientId: 123 
id: 2   workerId: 162   Datex: 2016-01-07   clientId: 123 
id: 3   workerId: 222   Datex: 2015-12-12   clientId: 123 
id: 4   workerId: 222   Datex: 2013-01-22   clientId: 100 
id: 2   workerId: 162   Datex: 2011-11-07   clientId: 123

由于我想要的查询:

  id: 2   workerId: 162   Datex: 2016-01-07   clientId: 123 
  id: 3   workerId: 222   Datex: 2015-12-12   clientId: 123

--> 所以我的第一张桌子上只有两个不同的工人。我想为每个工人显示最新日期的行

【问题讨论】:

  • id 列未在 group by 语句中使用。你确定你可以运行这个 sql 查询吗?
  • 是的,它有效。这个想法是显示每个workerId的最新Tupel。所以每个workerId应该只出现一次。
  • 换句话说:我想展示每个工人最新的Tupel
  • 真的吗? id 在输出中有什么价值?
  • 最新Tupel的值

标签: c# sql entity-framework linq


【解决方案1】:

你可以使用OrderByFirst(),查询应该是这样的

var selectedOrder = (from s in order
            where s.clientID == "123"
            select new
            {
                id = s.id,
                workerId = s.workerId,
                Datex = s.timestamp,
                clientID =s.clientID
            }).OrderBy(d => d.Datex).First();

GroupBy 多列

var selectedOrder = from s in order
            where s.clientID == "123"
            group s by new {s.workerId, s.id, s.clientID}
            into g
            select
            new
            {
                id = g.Key.id,
                workerId = g.Key.workerId,
                Datex = g.Max(s => s.timestamp),
                clientID = g.Key.clientID
            };

【讨论】:

  • 第一个代码仅显示所有工人的第一个 Tupel。但我想展示每个工人的第一个 Tupel
猜你喜欢
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 2021-10-11
  • 2011-01-17
  • 2022-11-13
相关资源
最近更新 更多