Можем ли мы удалить предложения из выражения linq?

Мне было интересно, возможно ли добавить / удалить предложение where из операторов выражения / запроса linq.

Например:-

var qry = from e in emp where(e => e.salary > 5000) select e;

Можно ли убрать где выражение на более поздней стадии?

Заранее спасибо:)

5 ответов

Решение

Да, это возможно, но вам нужно реализовать ExpressionVisitor класс, чтобы оценить составное выражение и изменить его в соответствии с вашими потребностями. Если вы не делаете что-то относительно сложное, возможно, есть лучший способ выполнить то, что вы хотите.

Если вы хотите программно добавлять и удалять операторы where, вы можете использовать операторы запросов.

var query = emp.Select(x => x);

if (someCondition)
  query = query.Where(x => x.Price > 50);

Вы должны расширить свой вопрос немного больше.

Вы можете только настроить фильтрацию, насколько я знаю

например, если вы пытаетесь удалить в зависимости от условия e.salary > 5000, вы должны попробовать что-то вроде

var diffQry = from e in emp where(e => e.salary <= 5000) select e;

Я думаю WHERE условие обязательно, если есть условный запрос. В противном случае (если нет условий) вы можете использовать:

var qry = from e in emp select e;

Если qry является IQueryable<T> - например, запрос LINQ-to-SQL или LINQ-to-Entities - тогда должна быть возможность проанализировать базовое дерево выражений и построить новое, исключая Where пункт.

Если qry это равнина IEnumerable<T> - например, запрос LINQ-to-Objects - тогда это невозможно сделать, так как не будет дерева выражений для анализа.

Другие вопросы по тегам