Лучший подход к синтаксическому анализу выражений - создать пользовательский ExpressionVisitor
. Конструкция анонимного типа представлена узлом NewExpression
, из которого можно получить доступ к членам и аргументам.
public class CustomExpressionVisitor : ExpressionVisitor
{
protected override Expression VisitNew(NewExpression node)
{
Console.WriteLine($"{node.Members?.First().Name} {node.Arguments.FirstOrDefault()}");
return base.VisitNew(node);
}
}
Тогда вы можете использовать это так:
var expressionVisitor = new CustomExpressionVisitor();
expressionVisitor.Visit(expr);
Который печатает первое свойство со значением:
DCCODE dc.CompanyCode
Конечно, с этим классом вы можете делать любые преобразования, какие вам нравятся, в этом дереве выражений.