repo
.Where(x=>x.Id==id)
.Include(x=>x.History.Select(c=>c.ProductInfo)).FirstOrDefault();
以上查询应返回给定用户购买的所有产品,并且必须包含产品详细信息。 它有效。所以导航属性没有问题。
现在我想将产品拆分为Delivered
和notDelivered
repo
.Where(x => x.Id == id)
.Include(x=>x.History.Select(c=>c.ProductInfo))
.Select(x =>
new Details { User = x,
notDelivered = x.History.Where(k=>!k.IsDelivered),
Delivered=x.History.Where(k=>k.IsDelivered)})
.FirstOrDefault();
它按照应有的方式划分产品,但ProductInfo始终为null。我不知道为什么不选择ProductInfo
答案 0 :(得分:1)
使用投影Include
时会被忽略。您可以尝试将ProductInfos
类型的IEnumerable<ProductInfo>
属性添加到Details
类,并在投影中填充该集合:
repo.Where(x => x.Id == id)
.Select(x =>
new Details { User = x,
notDelivered = x.History.Where(k=>!k.IsDelivered),
Delivered = x.History.Where(k=>k.IsDelivered),
ProductInfos = x.History.Select(k=>k.ProductInfo) })
.FirstOrDefault();
自动关系修正应该将加载的ProductInfo
添加到已加载的History
实体 - 就像它们已加载Include
一样。