Где пункт не работает с паратезами
Предположим, следующий запрос с использованием NH 3.4 и RepositoryPattern
var list = _repository
.QueryOver()
.Where(x => (x.Age > 20)) // notice the parantheses
.Future()
.ToList();
Несмотря на то, что добавлены эти паратезы, NH не работает и вызывает исключение SO.
Если заменить .Where(x => (x.Age > 20))
с .Where(x => x.Age > 20)
это работает как ожидалось.
Есть какие-нибудь подсказки, почему это не работает с лишними паратезами?
Заметка
Это упрощенный сценарий из общей картины. В производстве я передаю это .Where(...)
через параметр Expression<Func<Person, bool>> where
1 ответ
Решение
У меня есть сомнения, ошибка есть:
Expression<Func<MyClass, bool>> mc1 = x => (x.ID > 20);
Expression<Func<MyClass, bool>> mc2 = x => x.ID > 20;
var body1 = mc1.Body.NodeType; // GreatThan
var body2 = mc2.Body.NodeType; // GreatThan
Скобки удаляются компилятором. В дереве выражений "язык" (система классов) нет ничего, что явно представляло бы скобку.