C# 返回联接查询中的导航属性

C# 返回联接查询中的导航属性,c#,asp.net,linq,entity-framework,linq-to-entities,C#,Asp.net,Linq,Entity Framework,Linq To Entities,在构建患者预约应用程序时,我需要返回患者及其导航属性patientDetails,而返回的患者匹配一个sessionId,该ID不是直接从患者中推断出来的,而是从一系列其他导航属性中推断出来的。这本身并不困难,就像可以使用普通SQL连接一样,只是我的导航属性patientDetails从未包含在内 如果有人要求,包含路径是正确的 using (DbEntities db = new DbEntities()) { List<tblPatient> res = (from s

在构建患者预约应用程序时,我需要返回患者及其导航属性
patientDetails
,而返回的患者匹配一个
sessionId
,该ID不是直接从患者中推断出来的,而是从一系列其他导航属性中推断出来的。这本身并不困难,就像可以使用普通SQL连接一样,只是我的导航属性
patientDetails
从未包含在内

如果有人要求,包含路径是正确的

using (DbEntities db = new DbEntities())
{
    List<tblPatient> res = (from s in db.tblSessions
                            join b in db.tblBookings on s.id equals b.sessionId
                            join r in db.tblReferrals on b.referralId equals r.id
                            join a in db.tblAttendanceStatus on b.attendanceStatus equals a.id
                            join p in db.tblPatients.Include("tblPatientDetail") on r.patientId equals p.id
                            join pd in db.tblPatientDetails on p.patientDetailsId equals pd.id
                            where s.id == id
                            select p).ToList();

    return res;
}
使用(DbEntities db=new DbEntities())
{
列表res=(从db.tblSessions中的s开始)
在s.id上的db.tblBookings中加入b等于b.sessionId
在b.referralId上的db.tblReferrals中加入r等于r.id
在b.attendanceStatus上的db.tblAttendanceStatus中加入a。attendanceStatus等于a.id
在r.patientId=p.id上的db.tblPatients.Include(“tblPatientDetail”)中加入p
在p.patientDetailsId等于pd.id的db.tblPatientDetails中加入pd
其中s.id==id
选择p.ToList();
返回res;
}
我是否包含
.include
似乎没有什么区别


我忽略了什么?

当您使用
join
groupby
时,会忽略include。您可以将查询改为使用
where

List<tblPatient> res = (from p in db.tblPatients.Include("tblPatientDetail")
                        where 
                            (from s in db.tblSessions
                             join b in db.tblBookings on s.id equals b.sessionId
                             join r in db.tblReferrals on b.referralId equals r.id
                             join a in db.tblAttendanceStatus on b.attendanceStatus equals a.id
                             where r.patientId == p.id
                             where s.id == id
                             select 1).Any()
                         select p).ToList()
List res=(来自db.tblPatients.Include中的p(“tblPatientDetail”)
哪里
(从db.tblSessions中的s开始)
在s.id上的db.tblBookings中加入b等于b.sessionId
在b.referralId上的db.tblReferrals中加入r等于r.id
在b.attendanceStatus上的db.tblAttendanceStatus中加入a。attendanceStatus等于a.id
其中r.patientId==p.id
其中s.id==id
选择1.Any()
选择p.ToList()