非常に簡単な方法があり、その基本的な基準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
クエリを追加して返します。NHibernateでも同様のことが行われていQueryOverRestrictionBuilder
ます...しかし、上記は機能していて十分に単純ではありませんか?