包括选择导航属性

时间:2013-09-08 13:49:21

标签: asp.net-mvc entity-framework

repo
.Where(x=>x.Id==id)
.Include(x=>x.History.Select(c=>c.ProductInfo)).FirstOrDefault();

以上查询应返回给定用户购买的所有产品,并且必须包含产品详细信息。 它有效。所以导航属性没有问题。

现在我想将产品拆分为DeliverednotDelivered

               repo
               .Where(x => x.Id == id)
               .Include(x=>x.History.Select(c=>c.ProductInfo))
               .Select(x => 
                   new Details { User = x,
                                 notDelivered = x.History.Where(k=>!k.IsDelivered),
                                 Delivered=x.History.Where(k=>k.IsDelivered)})
               .FirstOrDefault();

它按照应有的方式划分产品,但ProductInfo始终为null。我不知道为什么不选择ProductInfo

1 个答案:

答案 0 :(得分:1)

使用投影Include时会被忽略。您可以尝试将ProductInfos类型的IEnumerable<ProductInfo>属性添加到Details类,并在投影中填充该集合:

repo.Where(x => x.Id == id)
    .Select(x => 
        new Details { User = x,
                      notDelivered = x.History.Where(k=>!k.IsDelivered),
                      Delivered = x.History.Where(k=>k.IsDelivered),
                      ProductInfos = x.History.Select(k=>k.ProductInfo) })
    .FirstOrDefault();

自动关系修正应该将加载的ProductInfo添加到已加载的History实体 - 就像它们已加载Include一样。