代码之家  ›  专栏  ›  技术社区  ›  albertein

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

  •  3
  • albertein  · 技术社区  · 16 年前

    我正在尝试使用表达式树编写一个动态Linq 2 Sql查询,但遇到一个异常,告诉我LessThan和GreaterThan运算符没有为其定义 System.String 系统字符串

    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"
    
    1 回复  |  直到 16 年前
        1
  •  4
  •   albertein    16 年前

    对不起,经过一段时间的挣扎,我意识到 > < 字符串上的运算符是通过调用 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)));