我有一个查询,看起来像这样的结果:选择自IEnumerable加入一个复杂的LINQ到SQL查询
var orderLines = from Order order in _orders
join OrderItem orderItem in dbc.OrderItems
on order.OrderId equals orderItem.OrderId
join Product product in dbc.Products
on orderItem.ProductId equals product.ProductId
join OrderItemQuantity oiq in dbc.OrderItemQuantities
on orderItem.OrderItemId equals oiq.OrderItemId
into orderItemQuantities
join ActivityQuantity aq in dbc.ActivityQuantities
on orderItem.OrderItemId equals aq.OrderItemId
into activityQuantities
orderby
order.OrderId ascending,
orderItem.OrderLineNumber ascending
select new {
Order = order,
Item = orderItem,
Product = product,
// I'd like to get these child items as IEnumerables or similar
ItemQuantities = orderItemQuantities,
ActivityQuantities = activityQuantities
};
编译没有问题,但导致orderItemQuantities
和activityQuantities
部分是从失踪查询,所以我得到一个选择/加盟/加盟订单/项目/产品,以及独立的个体上OIQ/AQ的每个条目选择:
SELECT (...) FROM [ORDERS] AS t0
INNER JOIN [ORDER_ITEMS] AS t1 ON t0.ORDER_ID = t1.ORDER_ID
INNER JOIN [PRODUCTS] AS t2 ON t1.PRODUCT_ID = t2.PRODUCT_ID
ORDER BY (...)
然后,为每个行的,它执行这些查询:
SELECT (...) FROM [ACTIVITY_QUANTITY] as t0
WHERE t0.ORDER_ITEM_ID = @p0
SELECT (...) FROM [ORDER_ITEM_QUANTITY] as t0
WHERE t0.ORDER_ITEM_ID = @p0
由于我有数以万计的行,这导致了一个荒谬的数量的查询。
有没有办法凝聚了OrderItem
的OrderItemQuantity
和ActivityQuantity
条目为IEnumerable
(或类似)的方式,使他们很容易从在选择使用的匿名类型访问?
这是不是简单地将仍然执行单个查询每次'递延枚举创建一个IList的'' IEnumerator.MoveNext'被调用? **更新:**是的,证实它只是简单地将底层枚举器转换为'IList ',并且查询仍然是分开的。 –
Polynomial
@Polynomial一个耻辱。然后删除这个答案。 EF为你列出清单:( – AakashM
不要删除答案,它可能会帮助其他人排除这种可能性。 – Polynomial