LINQ查询如何关联绑定到AllPractitionerLocations的子表?
LINQ 关联嵌套导航属性解决方案
你的报错核心原因是 AllPractitionerNetworkSpecialty 是 AllPractitionerLocations 的子导航属性,不能直接从 AllFacility 层面加载,需要用 ThenInclude 方法嵌套加载子级导航属性,这是EF/EF Core专门用于加载多级导航属性的语法。
正确实现代码
var query = _ODSContext.AllFacilities .Where(f => f.AllFacilityContacts.Any(c => ProviderContactIds.Contains(c.ContactID) && c.ContactTypeName == "Primary Rep")) .Where(f => f.TermDate > DateTime.Now) .Include(a => a.Address) .Include(b => b.AllFacilityContacts) // 先加载一级导航属性AllPractitionerLocations .Include(c => c.AllPractitionerLocations) // 嵌套加载AllPractitionerLocations的子导航属性 .ThenInclude(l => l.AllPractitionerNetworkSpecialty) .Include(e => e.AllFacilityServices) .OrderBy(f => f.FacilityName);
兼容旧版Entity Framework的写法
如果你使用的是EF6及更早版本,也可以用字符串路径的重载写法实现相同效果:
// 直接写多级导航属性的路径,用点分隔 .Include("AllPractitionerLocations.AllPractitionerNetworkSpecialty")
注意事项
- 注意属性名拼写要和实体类定义完全一致,你报错信息中出现的是复数形式
AllPractitionerNetworkSpecialties,请确认实体中的实际属性名,避免拼写错误 ThenInclude在部分版本EF Core中可能出现智能提示不显示的情况,直接正确书写属性名即可正常编译运行
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

