【发布时间】:2013-06-21 23:29:02
【问题描述】:
我正在尝试使用动态 linq 查询进行文件过滤。基本上,我让用户在我阅读的 XML 文档中定义 WhereExpression 和 OrderByExpression 字符串,然后将其应用于要从各个方向获取的文件列表。我在
找到了一个图书馆并决定使用它,但我似乎在开始时遇到了一些问题。到目前为止,当我尝试将 where 表达式和 Orderby 传递给 IQueryable 列表时,例如
**WhereQuery**="@SubType = 02"
**OrderByQuery**="FormID"
var sortedRepos = Repos.Where(dir.WhereExpression).OrderBy(dir.OrderByExpression);
我收到以下错误消息。
System.Linq.Dynamic.ParseException 被捕获 Message=Operator '=' 与操作数类型 'String' 和 'Int32' 不兼容 源=动态 位置=12 堆栈跟踪: 在 System.Linq.Dynamic.ExpressionParser.CheckAndPromoteOperands(类型签名,字符串 opName,Expression& 左,Expression& 右,Int32 errorPos) 在 System.Linq.Dynamic.ExpressionParser.ParseComparison() 在 System.Linq.Dynamic.ExpressionParser.ParseLogicalAnd() 在 System.Linq.Dynamic.ExpressionParser.ParseLogicalOr() 在 System.Linq.Dynamic.ExpressionParser.ParseExpression() 在 System.Linq.Dynamic.ExpressionParser.Parse(类型 resultType) 在 System.Linq.Dynamic.DynamicExpression.ParseLambda(ParameterExpression[] 参数,类型 resultType,字符串表达式,Object[] 值)
现在当我像这样使用比较运算符时,
**WhereQuery="@SubType == 02"
OrderByQuery="FormID"**
我也收到以下错误
System.Linq.Dynamic.ParseException was caught
Message=Operator '==' incompatible with operand types 'String' and 'Int32'
Source=Dynamic
Position=12
StackTrace:
at System.Linq.Dynamic.ExpressionParser.CheckAndPromoteOperands(Type signatures, String opName, Expression& left, Expression& right, Int32 errorPos)
at System.Linq.Dynamic.ExpressionParser.ParseComparison()
at System.Linq.Dynamic.ExpressionParser.ParseLogicalAnd()
at System.Linq.Dynamic.ExpressionParser.ParseLogicalOr()
at System.Linq.Dynamic.ExpressionParser.ParseExpression()
at System.Linq.Dynamic.ExpressionParser.Parse(Type resultType)
at System.Linq.Dynamic.DynamicExpression.ParseLambda(ParameterExpression[] parameters, Type resultType, String expression, Object[] values)
at System.Linq.Dynamic.DynamicExpression.ParseLambda(Type itType, Type resultType, String expression, Object[] values)
at System.Linq.Dynamic.DynamicQueryable.Where(IQueryable source, String predicate, Object[] values)
at System.Linq.Dynamic.DynamicQueryable.Where[T](IQueryable`1 source, String predicate, Object[] values)
如何正确指定我的表达式以便过滤我的列表?提前致谢
【问题讨论】: