これに似た他の質問を見てきましたが、実行可能な答えは見つかりませんでした。
次のコードを使用して、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
また、正しい型名を言うように変換するといいでしょう....。