1
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 始终为空。我不知道为什么不选择ProductInfo

4

1 回答 1

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的 s添加到加载的History实体 - 就好像它们已经加载了Include.

于 2013-09-08T14:25:32.407 回答