我正在尝试使用动态 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' 不兼容 Source=Dynamic Position=12 StackTrace: at System.Linq.Dynamic.ExpressionParser.CheckAndPromoteOperands(Type signatures, String opName , Expression& left, Expression& right, Int32 errorPos) 在 System.Linq.Dynamic.ExpressionParser.ParseLogicalAnd() 在 System.Linq.Dynamic.ExpressionParser.ParseLogicalAnd() 在 System.Linq.Dynamic.ExpressionParser.ParseLogicalOr() 在 System.Linq .Dynamic.ExpressionParser.ParseExpression() 在 System.Linq.Dynamic.ExpressionParser.Parse(Type 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)
如何正确指定我的表达式以便过滤我的列表?提前致谢