希望有人能帮助解决这个问题!通过子实体上的属性过滤聚合根实体和子实体
我给出一个基于标准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