これはとても簡単です。PredicateBuilder は毎回新しい述語インスタンスを作成するため(毎回 pred を置き換えるように記述する必要があることに注意してくださいpredicate = predicate.And...
)、単純に元の値を覚えておいて、最終的にそれに対して最終的な値を比較することができます。
var predicate = PredicateBuilder.True<o_order>();
var oldPredicate = predicate;
if (!string.IsNullOrEmpty(param.sSearch))
predicate = predicate.And(s => ........... ); // replace!
if (!string.IsNullOrEmpty(....))
predicate = predicate.And(s => ........... ); // replace!
if(predicate == oldPredicate) // was it changed?
; // no filters applied
else
; // some filters applied
ただし、どのフィルターが適用されたかを判断するのは困難です。それを知る必要がある場合は、情報を一緒に保存する必要があります (または述語ツリーを分析する必要があり、これはより困難になる可能性があります)。
var predicate = PredicateBuilder.True<o_order>();
var oldPredicate = predicate;
bool case1applied = !string.IsNullOrEmpty(....);
if (case1applied)
predicate = predicate.And(s => ........... );
bool case2applied = !string.IsNullOrEmpty(....);
if (case2applied)
predicate = predicate.And(s => ........... );
if(predicate == oldPredicate) // or the hard way: !case1applied && !case2applied
; // no filters applied
else
if(case1applied && case2applied) // all filters applied
else ....