Можем ли мы удалить предложения из выражения 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 - тогда это невозможно сделать, так как не будет дерева выражений для анализа.