Динамический Linq 2 Sql с использованием деревьев выражений, вызывающих исключение «Бинарный оператор LessThan не определен для System.String и System.String» - PullRequest
3 голосов
/ 14 января 2010

Я пытаюсь написать динамический запрос Linq 2 Sql, используя деревья выражений, но получаю исключение, сообщающее, что операторы LessThan и GreaterThan не определены для System.String и 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 Ответ

4 голосов
/ 14 января 2010

Извините, после некоторого затруднения я понял, что операторы > и < в строках реализованы с вызовом 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)));
...