Я обычно использую цепочку методов, но имею ту же проблему. И вот расширение, которое я использую
public static IQueryable<T> ConditionalWhere<T>(
this IQueryable<T> source,
Func<bool> condition,
Expression<Func<T, bool>> predicate)
{
if (condition())
{
return source.Where(predicate);
}
return source;
}
Это помогает избежать разрывов цепи. Также полезны те же ConditionalOrderBy
и ConditionalOrderByDescending
.