Я просмотрел другие вопросы, похожие на этот, но не смог найти подходящих ответов.
Я использовал следующий код для создания уникальных ключей для хранения результатов моих 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
в правильное имя типа.....