Можем ли мы удалить предложения из выражения linq? - PullRequest
1 голос
/ 03 марта 2011

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

Например: -

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

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

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

Ответы [ 5 ]

3 голосов
/ 03 марта 2011

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

0 голосов
/ 03 марта 2011

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

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

0 голосов
/ 03 марта 2011

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

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

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

Вам нужно еще немного расширить свой вопрос.

0 голосов
/ 03 марта 2011

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

var qry = from e in emp select e;
0 голосов
/ 03 марта 2011

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

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

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