【问题标题】:Linq group by only with max valueLinq group by 仅具有最大值
【发布时间】:2017-06-29 00:44:52
【问题描述】:

我有以下情况: 一张表Employee,比如:

----------
Id, Name, ....
----------

以及其他包含员工信息的表格,每天都是新的,例如:

EmployeeInfo
----------
EmployeeId, Date, someinfo
----------

所有这些都映射到实体框架上。 一个例子是:

Employee:
----------
id        Name
----------
1         Ep1
----------
2         Ep2
----------
EmployeeInfo
----------
EmployeeId     Date           someinfo
----------------------------------------
01            06/28/17        Infox
----------------------------------------
01            05/28/17        Infoy
----------------------------------------
02            05/27/17        Infog
----------------------------------------
02            05/25/17        Infoh
----------------------------------------

我想使用 linq 查询这些数据。我的目标是从 EmployeeInfo 中搜索员工和最新信息。 我的策略是使用 groupby 和 max 搜索所有 employeeInfo 并检索如下结构:

IGrouping <string, EmployeeInfo> 返回数据示例:

<"01", EmployeeInfo>
<"02", EmployeeInfo>

其中 EmployeeInfo 包含每个员工的最后数据

唯一的解决方案是使用 select new 并像这样制作 max: https://stackoverflow.com/a/10086118/4580924

是否有与上述链接不同的解决方案?

【问题讨论】:

  • 链接中的解决方案并不能满足您的需求:它提供的是最新日期,而不是最新日期的信息。
  • 请将您的表定义提供为合法的 C# 代码,以及合适的示例数据(同样在 C# 代码中),以及您希望输出的样子。那我们就可以轻松回答了。现在对我们来说太辛苦了。请阅读How to Ask

标签: c# linq linq-to-sql group-by


【解决方案1】:

如果要选择某个属性为最大值的记录,而不是该最大值属性本身的值,请使用OrderBy,后跟First,如下所示:

from e in Employee
join ei in EmployeeInfo on e.EmployeeId equals ei.EmployeeId
group e by e.EmployeeId into g
select g.OrderByDescending(ge => ge.Date).First()

【讨论】:

  • 这是正确的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多