Конвертировать запрос IQueryable <T>или LINQ в уникальную строку - PullRequest
3 голосов
/ 01 декабря 2011

У меня есть запрос LINQ (или IQueryable<T> объект, основанный на запросе LINQ), и я хочу получить некоторую уникальную строку на основе этого запроса.

У меня есть, например:

var someValue = 10;
var query = (from i in db.Customers
            where i.Id == someValue
            select i).AsQueryable();

Я должен получить что-то вроде этого:

"от i в db.Customers, где i.Id == 10"

Я пытаюсь использовать объект Expression ииграть с ним, но я не могу получить общий подход, чтобы получить строку с точные значения параметров.

Например:

public string GetKey<T>(IQueryable<T> query)
{
  ...
  return unique_string;
}

Обратите внимание, что разные значения параметров для одного и того же LINQзапрос должен содержать разные строки.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Я сильно подозреваю, что это просто не сработает. Помимо всего прочего, если вам нужно использовать AsQueryable (то есть, если ваш исходный запрос превышает IEnumerable<T>, то для начала компилятор будет использовать делегаты вместо деревьев выражений.

Если это все время pure IQuerable<T>, вы можете попробовать использовать query.Expression.ToString(), но, честно говоря, я не хочу на это полагаться.

0 голосов
/ 02 декабря 2011

Решена эта проблема с Сериализация дерева выражений с некоторыми улучшениями для получения точных значений переданных параметров.Он предоставляет большой, но уникальный файл XML на основе объектов IQueryable.

...