Как сказал Джереми, вам нужно выполнить запрос в таком порядке, чтобы выполнить запрос sql на стороне базы данных, а не переносить данные в память для разбивки на страницы. Если у вас 1 миллион записей, вы столкнетесь с некоторыми проблемами с производительностью при использовании вашего подхода.
О фильтрах, которые необходимо применить к вашему IQueryable, вы можете сделать так же, как предложил Джереми
var users = this.DbContext.User.Where(x => x.Age = age && x.Name = name)
или вы можете построить свой предикат следующим образом
private Expression<Func<User, bool>> GetMyPredicate(string name, int age)
{
Expression<Func<Application, bool>> predicate = x => true;
Expression<Func<Application, bool>> exp = null;
predicate = x => x.Name == name;
exp = x => x.Age = age;
//Check the And predicate below
predicate = exp != null ? predicate.And(exp) : predicate;
return predicate
}
Теперь вы делаете
var predicate = GetMyPredicate(name, age);
var users = this.DbContext.User.Where(predicate);
Если вам интересно, как работает предикат And
, см. Весь код здесь PredicateBuilder и попробуйте включить его в свое решение. Вы можете получить более подробную информацию о Динамически составляемых предикатах выражений