使用表达式树的动态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