NHibernate накапливать запрос по условиям - PullRequest
0 голосов
/ 13 сентября 2011

Я хочу создать своего рода цепочку фильтрации для фильтрации объектов Receipt с использованием функции queryOver.Цепочка может отличаться по длине, в зависимости от параметров, которые пользователь выбирает на экране.

В конце концов, я хочу, чтобы цепочка работала примерно так:

public IList<Receipt> RunFilters()
{
    IQueryOver<Receipt, Receipt> currQuery = NHibernateHelper.Session.QueryOver<Receipt>();

    foreach (var item in filters)
    {
        currQuery = item.RunFilter(currQuery);
    }
    return currQuery.List();
}

Итак, вопрос -как RunFilter должен быть определен?Я думал, что это должно быть

public IQueryOver<Receipt, Receipt> RunFilter(IQueryOver<Receipt, Receipt> prevFilter)

, и они могут делать фильтры вроде

return prevFilter.Where(receipt => receipt.TotalSum > 0);

Но я не могу сделать

return prevFilter.JoinQueryOver(v => v.Store).Where(vv => vv.Name.Equals(m_storeName));

Есть идеи?Заранее спасибо

Виктор

1 Ответ

1 голос
/ 13 сентября 2011
return prevFilter.JoinQueryOver(v => v.Store).Where(vv => vv.Name.Equals(m_storeName));

выше можно записать как

Store storeAlias = null;
return prevFilter.JoinAlias(v => v.Store, () => storeAlias).Where(() => storeAlias.Name == m_storeName);

РЕДАКТИРОВАТЬ: фиксированное уравнение

...