c# - 加入具有一对多关系的两个表并从多个方面选择最新的

标签 c# linq entity-framework-core

我有两个表:Patients 和 PatientVisits。一个 Patient 可以进行多次访问。 C#中有对应的Model类。

我将如何编写 Linq 查询来获取每位患者及其最近就诊日期?

执行此操作的原始 SQL 是:

select max(p."FirstName"), max(p."LastName"), max(pv."VisitDate")
from "Patients" p 
left outer join "PatientVisits" pv ON pv."PatientID" = p."ID" 
group by p."ID"

最佳答案

var answer = (from p in context.Patients
              join v in context.PatientVisits on p.ID equals v.PatientID into subs
              from sub in subs.DefaultIfEmpty()
              group sub by new { p.ID, p.FirstName, p.LastName } into gr
              select new 
              {
                  gr.Key.FirstName,
                  gr.Key.LastName,
                  VisitDate = gr.Max(x => x == null ? null : (DateTime?)x.VisitDate)
              }).ToList();

关于c# - 加入具有一对多关系的两个表并从多个方面选择最新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54460057/

相关文章:

c# - 使用 JSON.NET 序列化对象的动态属性名称

c# - 检查多个值(存储在专用集合中)是否在 LINQ 集合中,在查询中

c# - InvalidOperationException : The entity type <typename> was not found. 确保实体类型已经添加到模型中

sql-server - 减少 EF Core 字符串鉴别器列的大小以允许索引

c# - 关于C#中lock语句的困惑

c# - LinqToSql - 从嵌套列表中获取不同 ID 的列表

MySqlClient : SaveChanges in ASP. NET 不更新数据库表

c#迭代列表以合并具有相同字段的项目

c# - Entity Framework Core - 首先将动态值分配给代码中的公共(public)列

c# - 从 Roles 授权更改为 Claims 授权