1

我试图限制在一系列导航链中选择的元素。大致顺序如下:Order -> Preference(s) -> PreferenceCard -> Item(s) -> OrderItem

笔记:

  • 一个订单可以有多个偏好。
  • 偏好有 1 张偏好卡。
  • 偏好卡由项目组成。
  • OrderItem 包含有关特定于订单的项目的详细信息。

如何将 OrderItems 的选择限制为仅与我的订单相关联的那些?我的Include("Preference.PreferenceCard.Item.OrderItem")只是抓取所有 OrderItems,即使它们与订单不对应。

我试过一个Where()子句,但它似乎没有做任何事情:

.Where(
    o => o.Preference.Any(
        p => p.PreferenceCard.Items.Any(
            item => item.OrderItem.Any(
                orderItem => orderItem.OrderId == o.OrderId))))

我如何通过 OrderId 正确过滤 OrderItems,甚至通过导航属性链接?

4

1 回答 1

0

我相信对这些类型的问题造成混淆的主要来源是理解来自 EntityFramework 的实体与普通类不同。如果您不想操纵您的数据结构或其导航属性(添加、修改、删除),并且您只想拥有数据的自定义视图,那么您应该返回匿名类型或 POCO(普通旧 CLR 对象) )。您可以声明自己的类并相应地分配属性。

public class OrderView
{
  public int Id { get; set; }
  public IEnumerable<OrderItem> OrderItems { get; set; }
  ...
}

var query = from o in context.Orders
            select new OrderView
            {
              Id = o.Id,
              OrderItems = //custom filtering
              ...
             };
于 2012-05-09T16:42:38.457 回答