您好我有很多关系设置如下。
public class order
{
public int id { get; set; }
public virtual ICollection<OrderProducts> Products { get; set; }
}
public class product
{
public int id { get; set; }
public virtual ICollection<OrderProducts> Orders { get; set; }
}
public class OrderProducts
{
public int OrderId { get; set; }
public virtual Order Order{ get; set; }
public int ProductIdId { get; set; }
public virtual Product Product { get; set; }
}
我想将所有产品包含在(急切加载)到他们的订单中,但是当使用与客户一起显示的相同方法时,我的产品列表会填充OrderProducts-objects而不是Product-objects
public IEnumerable<Order> GetAll()
{
return dataContext.Orders
.Include(order => order.Customer)
// now include all products aswell..
}
我已经尝试过像运气好的东西
.Include(order => order.Products.Where(op => op.OrderId == order.Id).Select(p => p.Product))
如果有人能在这里帮助我,我将不胜感激。 您也非常欢迎分享有关如何构建更高级的lambdas的任何好资源,因为我对此并不熟悉..
答案 0 :(得分:30)
只需使用ThenInclude()
声明:
public class order
{
public int id { get; set; }
public virtual IList<OrderProducts> OrderProducts { get; set; }
}
//...
public IEnumerable<Order> GetAll()
{
return dataContext.Orders
.Include(order => order.OrderProducts)
.ThenInclude(orderProducts => orderProducts.Product);
}
如上所述here,尚未实施多对多关系。您必须加载OrderProducts
,然后加载Select(orderProducts => orderProducts.Product)
重要提示: IntelliSense完成可能会告诉您无法执行此操作,但您可以,只需进行真正的构建即可实现