Подтвердить что ты не робот

Преобразование выражения <T, bool> в строку

Мне нужен способ воссоздать динамически сгенерированные отчеты в какой-то момент в будущем. Короче говоря, мне нужно сохранить конкретный запрос linq (другой для каждого отчета) в базу данных, а затем выполнить запрос с динамическим Linq позже.

Это все хорошо, но я не могу найти способ преобразования выражения в строку.

Как в:

Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false);

должен стать:

"Product.Id > 5 && Product.Warranty != false"

Есть ли способ сделать это?

4b9b3361

Ответ 1

Это может быть не лучший/наиболее эффективный метод, но он работает.

Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false);

string expBody = ((LambdaExpression)exp).Body.ToString(); 
// Gives: ((x.Id > 5) AndAlso (x.Warranty != False))

var paramName = exp.Parameters[0].Name;
var paramTypeName = exp.Parameters[0].Type.Name;

// You could easily add "OrElse" and others...
expBody = expBody.Replace(paramName + ".", paramTypeName + ".")
                 .Replace("AndAlso", "&&");


Console.WriteLine(expBody);
// Output: ((Product.Id > 5) && (Product.Warranty != False))