Как получить уникальную строку из лямбда-выражения - PullRequest
5 голосов
/ 15 июня 2011

Я хотел бы кэшировать результат EF4, используя общий репозиторий & memcached. Все это прекрасно работает, за исключением того факта, что мне нужно уникальное представление ключа для лямбда-выражения.

Например, вызов общего репозитория может быть:

Repository<User> userRepository = new Repository<User>();
string name = "Erik";
List<User> users_named_erik = userRepository.Find(x => x.Name == name).ToList();

В моей общей функции хранилища мне нужно сделать уникальный ключ из лямбда-выражения, чтобы сохранить его в memcached.

Так что мне нужна функция, которая может сделать это

string GetPredicate(Expression<Func<T,bool>> where)
{

}

Результатом функции должна быть эта строка x=> x.Name == "Erik". А не что-то вроде +<>c__DisplayClass0), которое я получаю из метода ToString().

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

1 Ответ

1 голос
/ 15 июня 2011

Взгляните на эту запись в блоге .

По сути, вы хотите выполнить «Частичную оценку» выражения, чтобы учесть значение, введенное замыканием. Этот MSDN Walkthrough (под заголовком «Добавление оценщика выражений») содержит код, на который ссылается запись в блоге, для включения неоцененных членов замыкания в результирующую строку.

Теперь, он может не работать со сложными выражениями, но, похоже, он поможет вам в этом. Просто имейте в виду, что это не нормализует выражения. То есть x => x.Name == "Erik" функционально эквивалентно x => "Erik" == x.Name (и всем другим вариантам).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...