Entity framework core 在.net core 3中按日期和其他字段获取第一条记录
我正在尝试通过另一个字段“组”使用.NETCore3获取最新记录。在.NETCore2中,使用GroupBy可以实现这一点,但这不再有效,并且会导致异常-现在我正在寻找替代方案 实体如下所示:Entity framework core 在.net core 3中按日期和其他字段获取第一条记录,entity-framework-core,Entity Framework Core,我正在尝试通过另一个字段“组”使用.NETCore3获取最新记录。在.NETCore2中,使用GroupBy可以实现这一点,但这不再有效,并且会导致异常-现在我正在寻找替代方案 实体如下所示: Client --> Messages 示例:消息表中的数据如下所示: |Date |Client |Message | |01-01-2019|A |Hello | |05-10-2019|A |Blah | |06-11-2019|A |New
Client --> Messages
示例:消息表中的数据如下所示:
|Date |Client |Message |
|01-01-2019|A |Hello |
|05-10-2019|A |Blah |
|06-11-2019|A |Newest |*Most recent by Date for Group A
|03-01-2019|B |Oldest |
|10-05-2019|B |Test |
|20-10-2019|B |Also New|*Most recent by Date for Group B
我希望答复仅包括:
|Date |Client |Message |
|06-11-2019|A |Newest |*Most recent by Date for Group A
|20-10-2019|B |Also New|*Most recent by Date for Group B
在此之前,我可以执行以下操作:
PersistenceManager.Context.Client.Include(c => c.Client).Where(x.Date >= date).GroupBy(x => x.ClientId).Select(g => g.OrderByDescending(y => y.Date).FirstOrDefault());
我读过一篇有趣的博客,建议从客户端实体开始,但我有很多客户端记录(数百条),如果没有记录,它会创建一个空值。在这种情况下,这似乎也不是正确的解决方案
Context.Client.Select(g => g.Messages.OrderBy(p => p.Name).FirstOrDefault())
.ToList();
在.NETCore3中解决此类问题的任何人
注意:我知道存在使用.AsEnumerable()的解决方案,但这会将查询转换为客户端查询,然后您可以在客户端查询中进行筛选/分组等。我要寻找的解决方案是在SQL Server上运行查询的地方。
这与参考的问题相同,但适用于早期EF版本
注:日期列为DD-MM-YYYY