Мне было интересно, возможно ли добавить / удалить предложение where из операторов выражения / запроса linq.
Например: -
var qry = from e in emp where(e => e.salary > 5000) select e;
Можно ли удалить выражение where вболее поздний этап?
Заранее спасибо:)
Да, это возможно, но вам нужно реализовать класс ExpressionVisitor, чтобы оценить составное выражение и изменить его в соответствии с вашими потребностями. Если вы не делаете что-то относительно сложное, возможно, есть лучший способ выполнить то, что вы хотите.
ExpressionVisitor
Если qry является IQueryable<T> - например, запросом LINQ-to-SQL или LINQ-to-Entities - тогда должна быть возможность проанализировать базовое дерево выражений исоздать новый, исключая предложение Where.
qry
IQueryable<T>
Where
Если qry является простым IEnumerable<T> - например, запросом LINQ-to-Objects - тогда это можетне будет сделано, так как не будет дерева выражений для анализа.
IEnumerable<T>
Если вы хотите программно добавлять и удалять операторы where, вы можете использовать операторы запросов.
var query = emp.Select(x => x); if (someCondition) query = query.Where(x => x.Price > 50);
Вам нужно еще немного расширить свой вопрос.
Я думаю, что условие WHERE обязательно, если есть условный запрос.В противном случае (если нет условий) вы можете использовать:
WHERE
var qry = from e in emp select e;
вы можете настроить свою фильтрацию только насколько я знаю
, например, если вы пытаетесь удалить на основе условия e.salary> 5000, они вам следует попробовать что-то вроде
var diffQry = from e in emp where(e => e.salary <= 5000) select e;