Я бы использовал здесь обозначение точки:
var query = questions.Where(q => !q.IsDeleted);
if (catId != 0)
{
query = query.Where(q => cats.Contains(q.CatID));
}
if (authorId != 0)
{
query = query.Where(q => q.OwnerId == authorId);
}
Вы можете написать свой собственный метод расширения, чтобы сделать это немного проще:
public static IQueryable<T> OptionalWhere<T>(
this IQueryable<T> source,
bool condition,
Expression<Func<T,bool>> predicate)
{
return condition ? source.Where(predicate) : source;
}
Вы можете написать:
var query = questions.Where(q => !q.IsDeleted);
.OptionalWhere(catId != 0, q => cats.Contains(q.CatID))
.OptionalWhere(authorId != 0, q => q.OwnerId == authorId);