Entity Framework 如何仅通过MeasuringPoints外键关联查询Asset表数据
问题原因
- 你原写法中
.Include(x => x.Assets)加载的是和AssetFunctionalLocationServicePoint直接通过外键关联的Asset记录,当该外键为null时,返回自然为空。 - 你尝试写的
Include(x => x.MeasuringPoints.Select(y => y.Assets))不符合EF Core的关联加载语法,所以抛出表达式无效错误,加载集合导航属性的子导航属性需要使用ThenInclude方法。
解决方案
方案1:保留父对象结构,加载关联子数据
如果你需要保留AssetFunctionalLocationServicePoint的完整结构,同时加载关联的MeasuringPoints及对应的Assets,修改为如下写法:
var foundAssetFunctionalLocation = _context.AssetFunctionalLocationServicePoint .Include(x => x.MeasuringPoints) .ThenInclude(mp => mp.Assets) .Where(x => x.ServicePointReference == "3053880001") .FirstOrDefault(); // 若匹配结果有多条可替换为ToList()
查询完成后,遍历foundAssetFunctionalLocation.MeasuringPoints,从每个MeasuringPoint对象的Assets属性中即可获取到你需要的Asset记录。
方案2:直接查询关联Asset记录(性能更优)
如果你仅需要获取所有关联的Asset记录,不需要上层父对象数据,可以直接用投影查询,避免加载不必要的字段:
var relatedAssets = _context.AssetFunctionalLocationServicePoint .Where(x => x.ServicePointReference == "3053880001") .SelectMany(x => x.MeasuringPoints.SelectMany(mp => mp.Assets)) .ToList();
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

