我想做一种过滤链来使用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));
有什么想法吗? 提前致谢
维克多
答案 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);
编辑:固定等式