我们可以从linq表达式中删除子句吗?

时间:2011-03-03 03:36:20

标签: c# linq expression linq-expressions expressionvisitor

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

例如: -

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

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

提前致谢:)

5 个答案:

答案 0 :(得分:3)

是的,这是可能的,但您需要实现一个ExpressionVisitor类来评估复合表达式并根据您的需要进行更改。除非你做的事情比较复杂,否则可能有更好的方法来实现你想要的目标。

答案 1 :(得分:0)

根据我所知,您只能调整过滤

例如,如果试图根据条件e.salary>删除5000,你应该尝试像

这样的东西
var diffQry = from e in emp where(e => e.salary <= 5000) select e;

答案 2 :(得分:0)

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

var qry = from e in emp select e;

答案 3 :(得分:0)

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

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

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

您需要更多地扩展您的问题。

答案 4 :(得分:0)

如果qryIQueryable<T> - 例如,LINQ-to-SQL或LINQ-to-Entities查询 - 则应该可以分析基础表达式树并构建新的,不包括Where条款。

如果qry是普通的IEnumerable<T> - 例如,LINQ-to-Objects查询 - 那么就无法完成,因为没有要分析的表达式树。