Проблема в том, что выражение на самом деле является деревом.
Например, у вас есть следующий предикат:
Expression<Func<Person, bool>> expr = x => x.Name == "Shlomi" && x.Age == 26;
Если вы проверите expr, вы увидите, что это телоимеет «AndAlso» NodeType
, а также имеет два свойства для операндов - Left
и Right
, каждый из которых указывает на другой Expression
объект с «Равным» NodeType
, который в свою очередь снова имеет два свойства Left
иRight
, которые указывают на Expression
типа MemberAccess
и Constant
соответственно.
Хотя вы можете обрабатывать это дерево и извлекать всю необходимую информацию, вы в конечном итоге реализуете свой собственный поставщик LINQ2SQL,например, изобретать велосипед.Если вы так думаете, я надеюсь, что предоставил достаточно информации, чтобы начать копать ...