我想知道是否可以从 linq 表达式/查询运算符中添加/删除 where 子句。
例如:-
var qry = from e in emp where(e => e.salary > 5000) select e;
是否可以在后期删除 where 表达式?
提前致谢 :)
我想知道是否可以从 linq 表达式/查询运算符中添加/删除 where 子句。
例如:-
var qry = from e in emp where(e => e.salary > 5000) select e;
是否可以在后期删除 where 表达式?
提前致谢 :)
是的,这是可能的,但是您需要实现一个ExpressionVisitor
类来评估复合表达式并根据您的需要进行更改。除非您正在做一些相对复杂的事情,否则可能有更好的方法来完成您想要的事情。
据我所知,你只能调整你的过滤
例如,如果根据条件 e.salary > 5000 尝试删除,您应该尝试类似
var diffQry = from e in emp where(e => e.salary <= 5000) select e;
WHERE
如果有条件查询,我认为子句是必需的。否则(如果没有条件),您可以使用:
var qry = from e in emp select e;
如果您想以编程方式添加和删除 where 子句,您可以使用查询运算符。
var query = emp.Select(x => x);
if (someCondition)
query = query.Where(x => x.Price > 50);
您需要进一步扩展您的问题。
如果qry
是IQueryable<T>
- 例如,LINQ-to-SQL 或 LINQ-to-Entities 查询 - 那么应该可以分析底层表达式树并构建一个不包括该Where
子句的新表达式树。
如果qry
是一个普通的IEnumerable<T>
——例如,一个 LINQ-to-Objects 查询——那么这不能完成,因为没有要分析的表达式树。