2011-09-12 64 views
0

我想要做一种过滤链来使用queryOver功能来过滤Receipt对象。 链条的长度可以根据用户在屏幕上选择的参数而有所不同。NHibernate累积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
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); 

编辑:固定式

+0

谢谢!当我按原样复制它时,我得到了一个异常,但在将storeAlias.Name.Equals更改为storeAlias.Name == ...之后,它工作正常。 – Vic