NHibernate累积queryOver条件

时间:2011-09-12 21:45:58

标签: nhibernate queryover

我想做一种过滤链来使用queryOver功能过滤Receipt对象。 根据用户在屏幕上选择的参数,链的长度可以不同。

最终,我希望链以某种方式运行:

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 个答案:

答案 0 :(得分:1)

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);

编辑:固定等式