希望有人能幫助解決這個問題!通過子實體上的屬性過濾聚合根實體和子實體
我給出一個基於標準Order-> OrderLine-> Product的例子,而不是實際的情況來使它更容易解釋!
基本上,我想運行一個查詢,返回所有包含電視訂單行的訂單。很簡單:
IEnumerable<Order> orders;
using (var context = new DataContext())
{
var source =
context.Orders.Include("OrderLines").Include(
"OrderLines.Product");
orders= source.Where(o => o.OrderLines.Where(ol => ol.Product.Name == "TV")).ToList();
}
return orders;
這個作品在這個意義上,我得到令實體的正確收集,但是當我在每一個訂單的集合OrderLines的使用看它包含所有 OrderLines不僅僅是那些含電視。
希望是有道理的。
預先感謝任何幫助。
感謝您的回答。是否有任何方法可以在一個語句中過濾所有訂單的OrderLines,而是循環處理訂單集合並過濾每個單獨的訂單行? – Gareth 2011-05-18 08:58:19
我可以考慮接近你所擁有的狀態的唯一方法是直接從OrderLines集合中檢索所有帶有「TV」的OrderLines(對於OrderLines的整個實體集合,與Order沒有關係,即'dbContext.OrderLines.Where ol => ol.Product.Name ==「TV」)'),然後逐步升級到每個訂單。就像SQL查詢中的表格數據一樣,您將看到許多OrderLines的相同Order,並且如果使用了'ReturnedOrderLine.Order.OrderLines',那麼您將看到該Order的全部OrderLines。問題在於你正在向查詢應用過濾器而不是結果。 – Lazarus 2011-05-18 09:52:52
最終爲兩個階段的過程進行了檢索,檢索所有訂單項次的匹配訂單,然後遍歷每個訂單,並將訂單過濾到感興趣的訂單項。這似乎有點低效,因爲我從數據庫獲取的數據比我需要的還多,然後在內存中對其進行過濾,但它起作用!謝謝您的幫助。 – Gareth 2011-05-20 08:26:46