数据库
首页 > 数据库> > 使用表达式树的动态Linq 2 Sql引发异常“小于未为System.String和System.String定义的二进制运算符”

使用表达式树的动态Linq 2 Sql引发异常“小于未为System.String和System.String定义的二进制运算符”

作者:互联网

我正在尝试使用表达式树编写一个动态的Linq 2 Sql查询,但是我遇到一个异常,告诉我未为System.String和System.String定义LessThan和GreaterThan运算符,我觉得很奇怪,这是真的?还是我做错了什么?

Expression<Func<SomeDataContextType, string>> codeSelectorExpresion = 
    x => x.CodeColumn;
var row = Expression.Parameter(typeof(SomeDataContextType), "row");
var expression = 
   Expression.GreaterThan(
       Expression.Invoke(codeSelectorExpression, row),
       Expression.Constant("someString", typeof(string)));
//I'm trying to build something like SomeDataContextType.CodeColumn > "someString"

解决方法:

抱歉,经过一段时间的努力,我意识到>和<字符串上的运算符实现了对string.CompareTo的调用,因此我更新了代码以改为使用string.CompareTo方法,并且它起作用了.还是要谢谢你,
表达式必须为:

var expression =
    Expression.GreaterThan(
       Expression.Call(
            Expression.Invoke(codeSelectorExpression, row), 
            typeof(string).GetMethod("CompareTo", new[] {typeof(string)}),
            Expression.Constant("someString")),
       Expression.Constant(0, typeof(int)));

标签:linq-to-sql,c,expression-trees
来源: https://codeday.me/bug/20191106/2001807.html