有一种非常简单的方法,如何获取IQueryOver
、搜索其基础条件并附加一个,请参阅https://gist.github.com/2304623
public static IQueryOver<TRoot, TSubType> WhereBitwiseRestriction<TRoot, TSubType>(
this IQueryOver<TRoot, TSubType> query
, Expression<Func<TSubType, object>> expression
, int number)
{
var name = ExpressionProcessor.FindMemberExpression(expression.Body);
query.UnderlyingCriteria.Add
(
BitwiseRestrictions.AtLeastOneFlagSet(name, number)
);
return query;
}
并使用它
var criteria = QueryOver.Of<InternalAssessor>()
...
.WhereRestrictionOn(x => x.Name).IsLike(searchedName) // standard
...
.WhereBitwiseRestriction(x => x.Sector, (int)sector) // custom
...
为了完全满足您的要求,我们需要引入一些中间人对象,该对象将引用query
和我们的BitwiseRestrictions
. 另一个扩展将立即接受它,追加number
并返回查询。类似的是QueryOverRestrictionBuilder
在 NHibernate 中做...但上述工作不够简单吗?