我想知道是否可以在linq表达式/查询运算符中添加/删除where子句。
例如: -
var qry = from e in emp where(e => e.salary > 5000) select e;
是否可以在以后删除where表达式?
提前致谢:)
答案 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)
如果qry
是IQueryable<T>
- 例如,LINQ-to-SQL或LINQ-to-Entities查询 - 则应该可以分析基础表达式树并构建新的,不包括Where
条款。
如果qry
是普通的IEnumerable<T>
- 例如,LINQ-to-Objects查询 - 那么就无法完成,因为没有要分析的表达式树。