Я посмотрел на другие вопросы, подобные этому, но я не смог найти никаких реальных ответов.
Я использовал следующий код для создания уникальных ключей для хранения результатов моих запросов linq в кеше.
string key = ((LambdaExpression)expression).Body.ToString();
foreach (ParameterExpression param in expression.Parameters)
{
string name = param.Name;
string typeName = param.Type.Name;
key = key.Replace(name + ".", typeName + ".");
}
return key;
Кажется, что это нормально для простых запросов, содержащих целые числа или логические значения, но когда мой запрос содержит вложенные постоянные выражения, например.
// Get all the crops on a farm where the slug matches the given slug.
(x => x.Crops.Any(y => slug == y.Slug) && x.Deleted == false)
Возвращенный ключ:
(True AndAlso (Farm.Crops.Any(y = > (Значение (OzFarmGuide.Controllers.FarmController + < > c__DisplayClassd).slug == y.Slug)) AndAlso (Farm.Deleted == False)))
Как вы видите, любое имя урожая, которое я передаю, даст тот же самый результат. Есть ли способ, который я могу извлечь значение данного параметра, чтобы я мог различать мои запросы?
Также преобразование y
, чтобы сказать правильное имя типа было бы хорошо.....