【发布时间】:2018-02-13 14:54:57
【问题描述】:
我有这 4 个课程。
它们被用于层次结构:
class Reception {
virtual List<Pallets> Pallets { get; set; }
float Weight { get; set; }
}
class Pallet {
virtual List<PalletDetail> PalletDetail { get; set; }
}
class PalletDetail {
virtual Package Package { get; set; }
int Quantity { get; set; }
}
class Package {
float Weight { get; set; }
}
对于每个接收我想计算重量,所以我有这样的东西:
foreach (var reception in dbContext.Receptions
.Include(a => a.Pallets)
.Include(a => a.Pallets.Select(b => b.PalletDetail))
.ToList())
{
reception.Weight = reception.Pallets
.SelectMany(p => p.PalletDetail)
.Sum(r => r.Quantity * r.Package.Weight) ?? 0;
}
dbContext.SaveChanges();
问题是对象Package没有被包含在查询中,所以之前的foreach在每次迭代中都会生成一个SQL查询
问题:我怎样才能包含它? (语法是什么?)
【问题讨论】:
-
怎么样?这就是问题:“我怎样才能包含它?”
-
可能的欺骗:stackoverflow.com/questions/34730005/… - 虽然 EF 版本可能不同,但如果您使用 Code-First,那么它应该是相似的......而且是的,大卫所说的也可能是好的 :)
-
.Include(a => a.Pallets.Select(b => b.PalletDetail.Package)) -
嗯,错了... b.PalletDetail 是一个列表...
-
没有区别,因为获取.Package,它会自动包含PalletDetail和Pallets