假设一个实体框架,在LazyLoading上下文中。
我们有3个实体:
以下查询为所有产品带来Name = Books。并且每个产品都会加载所有 OrderDetails ,其中OrderDetail.Quantity> 5.
var query = anEntityManager.Products.Where(p => p.Name == "Books")
.Select(p => new { Product = p, OrderDetails = p.OrderDetails.Where(od => od.Quantity > 5) });
var results = query.ToList();
var products = results.Select( x => x.Product);
我的问题是,未从数据库中检索每个 OrderDetail 的详细信息。如何在此查询中添加“包括”以便在同一查询中从数据库加载详细信息?
答案 0 :(得分:1)
我认为你需要扩展你的预测:
var query = anEntityManager.Products.Where(p => p.Name == "Books")
.Select(p => new
{
Product = p,
OrderDetails = p.OrderDetails.Where(od => od.Quantity > 5),
Details = p.OrderDetails.Where(od => od.Quantity > 5)
.SelectMany(od => od.Details)
});
var results = query.ToList();
var products = results.Select( x => x.Product);
不支持在投影中使用Include
,因此这个(有点难看)代码是我知道在一个数据库查询中获得结果的唯一方法。
你也可以使用Select
代替SelectMany
(Details
然后是IEnumerable<IEnumerable<Detail>>
而不是IEnumerable<Detail>
},因为你正在扔掉无论如何都是预计的属性 - 除了Product
属性。