C# Linq返回最大生效日期后的对象列表

C# Linq返回最大生效日期后的对象列表,c#,entity-framework,linq,C#,Entity Framework,Linq,Hiiya 因此,尝试计算出一个查询,该查询根据所选日期时间之前的最大有效起始日期返回对象列表 原理示例 +----+--------------+------------+----------------+ | id | Employee_Num | Money_Owed | Effective_From | +----+--------------+------------+----------------+ | 1 | 1 | 10.11 | 20/10/

Hiiya

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

原理示例

+----+--------------+------------+----------------+
| 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     |
+----+--------------+------------+----------------+
假设我想返回17年10月21日的每个员工记录,我希望下面的记录作为对象(实体)列表返回

截至2017年10月24日

+----+--------------+------------+----------------+
| id | Employee_Num | Money_Owed | Effective_From |
+----+--------------+------------+----------------+
| 2  | 1            | 15.11      | 24/10/2017     |
+----+--------------+------------+----------------+
| 4  | 2            | 6.89       | 20/10/2017     |
+----+--------------+------------+----------------+
我猜这个查询应该是这样的,但是我不能计算出它应该是什么

 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) };
var qry=来自t,单位为db.Entity.Where(x=>x.Effective\u来自x.Employee\u Num)
选择新实体{*需要实体字段的其余部分*,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();
var qry=db.Entity.Where(x=>x.Effective\u From x.Employee\u Num)
.Then递减(x=>x.Effective\u From)
.GroupBy(x=>x.Employee_Num)
.Select(g=>g.FirstOrDefault())
.ToList();

这是如果您想要实际的实体。我会避免对实体执行“选择新”之类的操作,因为这将包含相关实体的数据,但就上下文而言,它们不是相同的引用。Select()将用于检索适合某些逻辑的匿名类型,或填充前端的视图模型,或填充API结果的DTO。

我无法理解您的问题,这个LINQ查询看起来很奇怪如何使用g.max你在查询中没有做任何分组我需要一个工作查询来提供预期的结果我的查询不工作,也不确定它应该是什么只是一个猜测。你能分享你的查询吗?我已经编辑了这个问题,以便更清楚地了解查询。。。这只是一个猜测,我需要什么,而不是我实际运行…工作完美!
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();