使用表达式树为LINQ查询构建IQueryable.Any我正在使用System.Linq.Expressions.Expression类动态构建SQL“WHERE”子句。它适用于简单的子句,例如添加一个“PhaseCode=X”子句,我执行以下操作:varequalTarget=Expression.Constant(phaseCode,typeof(int?));varphaseEquals=Expression.Equal(Expression.PropertyOrField(projParam,"PhaseCode"),equalTarget);但是,现在我正在尝试构建一个表达式,如果该项目已分配给特定组,该表达式将返回记录。项目和组具有多对多关系。没有表达式树,我会这样做:db.Projects.Where(p=>....&&p.GroupsAssigned.Any(g=>g.ID==groupId))但是,我似乎无法findExpress类的方法。实际上有两件事我无法弄清楚:非常感谢任何帮助。调用扩展方法,如Enumerable.Any或Queryable.Any,只是对序列的静态方法调用和为WHERE子句创建的lambda表达式。您可以使用Expression.Call执行此操作://forEnumerable.Any(IEnumerable,Predicate)varoverload=typeof(Enumerable).GetMethods("Any").Single(mi=>mi.GetParameters().Count()==2);varcall=Expression.Call(overload,Expression.PropertyOrField(projParam,"GroupsAssigned"),anyLambda);对于Queryable.Any,您需要将其转换为方法:staticExpressionBuildAny(Expression>predicate){varoverload=typeof(Queryable).GetMethods("Any").Single(mi=>mi.GetParameters().Count()==2);varcall=Expression.Call(overload,Expression.PropertyOrField(projParam,"GroupsAssigned"),predicate);回电;}虽然这看起来很奇怪,但您不能用普通查询来做到这一点。以上就是C#学习教程:使用表达式树为LINQ查询构建IQueryable.Any。分享的所有内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收藏,不代表侵权,请点右联系管理员删除。如需转载请注明出处:
