我看过与此类似的其他问题,但找不到任何可行的答案。
我一直在使用以下代码生成唯一键,用于将 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 => (value(OzFarmGuide.Controllers.FarmController+<>c__DisplayClassd).slug == y.Slug)) AndAlso (Farm.Deleted == False)))
如您所见,我通过的任何作物名称都会给出相同的关键结果。有没有办法可以提取给定参数的值,以便区分我的查询?
也将转换为y
正确的类型名称会很好......