1

我想知道是否可以从 linq 表达式/查询运算符中添加/删除 where 子句。

例如:-

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

是否可以在后期删除 where 表达式?

提前致谢 :)

4

5 回答 5

3

是的,这是可能的,但是您需要实现一个ExpressionVisitor类来评估复合表达式并根据您的需要进行更改。除非您正在做一些相对复杂的事情,否则可能有更好的方法来完成您想要的事情。

于 2011-03-03T03:44:44.117 回答
0

据我所知,你只能调整你的过滤

例如,如果根据条件 e.salary > 5000 尝试删除,您应该尝试类似

var diffQry = from e in emp where(e => e.salary <= 5000) select e;
于 2011-03-03T03:41:25.120 回答
0

WHERE如果有条件查询,我认为子句是必需的。否则(如果没有条件),您可以使用:

var qry = from e in emp select e;
于 2011-03-03T03:44:10.033 回答
0

如果您想以编程方式添加和删除 where 子句,您可以使用查询运算符。

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

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

您需要进一步扩展您的问题。

于 2011-03-03T03:46:17.580 回答
0

如果qryIQueryable<T>- 例如,LINQ-to-SQL 或 LINQ-to-Entities 查询 - 那么应该可以分析底层表达式树并构建一个不包括该Where子句的新表达式树。

如果qry是一个普通的IEnumerable<T>——例如,一个 LINQ-to-Objects 查询——那么这不能完成,因为没有要分析的表达式树。

于 2011-03-03T03:46:50.313 回答