gpt4 book ai didi

c# - Linq 返回最大有效起始日期后的对象列表

转载 作者:行者123 更新时间:2023-11-30 21:37:42 25 4
gpt4 key购买 nike

你好,

因此尝试制定一个查询,根据所选日期时间之前的最大有效起始日期返回对象列表。

原理示例

+----+--------------+------------+----------------+
| id | Employee_Num | Money_Owed | Effective_From |
+----+--------------+------------+----------------+
| 1 | 1 | 10.11 | 20/10/2017 |
+----+--------------+------------+----------------+
| 2 | 1 | 15.11 | 24/10/2017 |
+----+--------------+------------+----------------+
| 3 | 1 | 20.11 | 30/10/2017 |
+----+--------------+------------+----------------+
| 4 | 2 | 6.89 | 20/10/2017 |
+----+--------------+------------+----------------+
| 5 | 2 | 9.89 | 25/10/2017 |
+----+--------------+------------+----------------+
| 6 | 2 | 12.89 | 29/10/2017 |
+----+--------------+------------+----------------+

假设我想返回截至 2017 年 10 月 21 日的每个员工记录,我希望以下内容作为对象(实体)列表返回

+----+--------------+------------+----------------+
| id | Employee_Num | Money_Owed | Effective_From |
+----+--------------+------------+----------------+
| 1 | 1 | 10.11 | 20/10/2017 |
+----+--------------+------------+----------------+
| 4 | 2 | 6.89 | 20/10/2017 |
+----+--------------+------------+----------------+

然后截至 24/10/2017

+----+--------------+------------+----------------+
| id | Employee_Num | Money_Owed | Effective_From |
+----+--------------+------------+----------------+
| 2 | 1 | 15.11 | 24/10/2017 |
+----+--------------+------------+----------------+
| 4 | 2 | 6.89 | 20/10/2017 |
+----+--------------+------------+----------------+

我猜 Query 应该是这样的,但无法弄清楚它应该是什么。

 var qry = from t in db.Entity.Where(x => x.Effective_From <= as_of_date)
.OrderBy(x => x.Employee_Num)
select new Entity { *need rest of entity fields* ,effective_from = Max(e => e.Effective_From) };

任何帮助完成或指向不同方向的帮助将不胜感激...

最佳答案

我相信您想要做的将涉及一个 GroupBy 表达式,以按员工编号分组,按员工编号排序,然后从降序开始生效,然后采用第一个可用组合。

var qry = db.Entity.Where(x => x.Effective_From <= as_of_date)
.OrderBy(x => x.Employee_Num)
.ThenByDescending(x => X.Effective_From)
.GroupBy(x => x.Employee_Num)
.Select(g => g.FirstOrDefault())
.ToList();

这是您想要实际实体的情况。我会避免为一个实体做类似“选择新”的事情,因为虽然这将包含相关实体的数据,但就上下文而言,它们不是相同的引用。 .Select() 将用于检索适合某些逻辑的匿名类型或填充前端的 View 模型,或 API 结果的 DTO。

关于c# - Linq 返回最大有效起始日期后的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46973922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com