我有一个像这样的对象图。我想在Linq中动态构建fetch表达式到NHibernate,这样我就可以在一次SQL调用中获得所有对象图,
我认为,我可以写这样的抓取,这可以做到这一点,
IQueryable<Customer> lists = customerPersister.Query()
.Where(item => item.Id == id)
.FetchMany(item => item.LineOfBusiness)
.FetchMany(i2 => i2.Address)
.FetchMany(i3 => i3.Orders)
.ThenFetchMany(i4=>i4.OrderItems) ;
但我并不总是需要所有这些对象图。有时我需要Customer
和Address
,有时Customer
和LinesOfBusiness
或某个时间Customer
和Orders
。
无论如何,我可以动态构建这个fetch表达式吗?
答案 0 :(得分:0)
您应该可以根据需要简单地扩展查询:
IQueryable<Customer> lists = customerPersister.Query().Where(item => item.Id == id);
if (needLinesOfBusiness)
lists = lists.FetchMany(item => item.LineOfBusiness);
if (needAddress)
lists = lists.FetchMany(item => item.Address);
if (needOrders || needOrderItems)
{
if (!needOrderItems)
lists = lists.FetchMany(item => item.Orders);
else
lists = lists.FetchMany(item => item.Orders).ThenFetchMany(order => order.Items);
}
唯一的诀窍是ThenFetchMany
不适用于IQueryable<Customer>
,因此您需要一次性包含订单和订单商品。