Создание динамического выражения выборки - PullRequest
1 голос
/ 10 августа 2011

DomainModel У меня есть такой граф объектов.Я хотел бы динамически построить выражение выборки в Linq для 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.

Есть ли вообще, я могу динамически построить это выражение выборки?

1 Ответ

0 голосов
/ 14 февраля 2012

Вы должны иметь возможность просто расширять запрос по мере необходимости:

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>, поэтому вы должны включать заказ и элементы заказа за один раз.

...