LambdaExpression を文字列に変換するメソッドがあります。これらの文字列をキャッシュのキーとして使用します。
string p = "x";
var a = LambdaToString<MyType>(m => m.P == p);
これとは異なります:
string p = "y";
var a = LambdaToString<MyType>(m => m.P == p);
ただし、現在の LambdaToString メソッドの状態では、p の値に関係なく同じ出力が生成されます。それは次のとおりです。
(MyType.P == value(ConsoleApplication1.Program+<>c__DisplayClass0).p)
LambdaToString 関数で実行したいのは、式の "value(class).p" 部分を、場合に応じて "x" または "y" の実際のリテラル文字列に解決することです。
これが私の LambdaToString メソッドの現在の状態です。必要な出力を生成するためにそれを変更するために何をする必要があるかわかりません:
public static string LambdaToString<T>(Expression<Func<T, bool>> expression)
{
string body = expression.Body.ToString();
foreach (var parm in expression.Parameters)
{
var parmName = parm.Name;
var parmTypeName = parm.Type.Name;
body = body.Replace(parmName + ".", parmTypeName + ".");
}
return body;
}