Выражение C # linq лучше для строки - PullRequest
0 голосов
/ 22 марта 2019

Мне нужно напечатать выражение linq, как оно написано в исходном коде. Я искал решения, но до сих пор рекомендую использовать expr.ToString ().

Это не сработает для меня. Например, если у меня есть выражение:

Expression<Func<int, int>> expr = v => v + 1;

ToString () вернет v => (v + 1)

Теперь, если я сделаю небольшую модификацию вышеупомянутого случая

var a = 3;
Expression<Func<int, int>> expr = v => v + a;

затем ToString () возвращает v => (v + value(Program+<>c__DisplayClass0_0).a). Я ищу что-то вроде v => (v + a)

Мой текущий вариант использования состоит в том, что у меня есть набор правил, объявленных как Expression<Func<TSource, ValidationResult>>, затем мне нужно оценить, сколько времени потребовалось для их выполнения, и для этого мне нужно правильно их пометить. ToString () для правила создаст строку, которая не очень читаема; так же, как в приведенном выше примере, все, что не определено в вызывающем классе, будет иметь префикс с длинной строкой, указывающей, откуда токен.

1 Ответ

0 голосов
/ 23 марта 2019

Вы можете использовать ReadableExpressions , чтобы красиво напечатать его:

var a = 3;
Expression<Func<int, int>> expr = v => v + a;

expr.ToReadableString(); // "v => v + a"
...