我有以下模型:
public class Order
{
public int Id {get; set;}
public int Number {get; set;}
public virtual ICollection<OrderDetail> Details {get; set;}
}
public class OrderDetail
{
public int Id {get; set;}
public int OrderId {get; set;}
public virtual Product Product {get; set;}
}
public class Product
{
public int Id {get; set;}
public int Number {get; set;}
public string Description {get; set;}
}
在我的OrderRepository中,我加载了一个完整的订单,如下所示:
public override Order Get(int id)
{
return base.Get(id, x => x.Details);
}
基本方法是:
public virtual T Get(int id, params Expression<Func<T, object>>[] include)
{
if (include.Any())
{
var set = include.Aggregate<Expression<Func<T, object>>, IQueryable<T>>
(dbSet, (current, expression) => current.Include(expression));
return set.SingleOrDefault<T>(x => x.Id == id);
}
return dbSet.Find(id);
}
上面的部分工作正常,因为它加载了Order和OrderDetails。但是,我也想为每个详细信息加载相关的产品,以便我也可以在列表中显示产品说明。
如何改进上述方法以允许我这样做?
只需添加另一个带有nested的参数即可Select
:
public override Order Get(int id)
{
return base.Get(id, x => x.Details, x => x.Details.Select(z => z.Product));
}
参见MSDN
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句