1

ASP.NETキャッシュでキャッシュアスペクトを使用しています。ReturnValueに基づいて条件を作成する必要があります。

問題を単純化しました。単純なPOCOオブジェクトを返すメソッドでCacheResultアスペクトを使用します。

定義は次のとおりです。

public class MyData
{
    public string MyProperty { get; set; }
}

public class MyResponse
{
    public int MyId { get; set; }
    public MyData [] Result { get; set; }
}

キャッシュの作成条件が必要です-MyResponse.MyData.Lenghtがバッチ制限よりも大きい場合にのみ結果をキャッシュします。

[CacheResult("AspNetCache", "'MyResponse.MyId=' + #id", 
             Condition = "MyResponse.Result.Length > #batchLimit")]
public MyResponse GetResponse(int id, int batchLimit)
{
    Thread.Sleep(5000);
    return new MyResponse
               {
                   MyId = 1,
                   Result =
                       new MyData[]
                           {
                               new MyData {MyProperty = "A"}, new MyData {MyProperty = "B"},
                               new MyData {MyProperty = "C"},
                           }
               };
}

私はこの条件の定義を試しました:

Condition = "MyResponse.Result.Length > #batchLimit"

このエラーが発生しました:

「MyResponse」ノードは、指定されたコンテキスト[Sample.MyResponse]に対して解決できません。

だから私は2番目のバージョンを試しました:

Condition = "'MyResponse.Result.Length' > #batchLimit"

エラーで終了しました:

Cannot compare instances of [System.String] and [System.Int32] because they cannot be coerced to the same type.

私はそれをグーグルで検索 ReturnValueします。次のようなキーワードを使用できます。

Condition = "#ReturnValue != null"

しかし、どうすればにアクセスできるのかわかりませんMyResponse.MyData.Length

4

1 に答える 1

3

条件式の評価のコンテキストは戻り値なので、次のようにします。

Condition = "Result.Length > #batchLimit"

に相当

Condition = "#root.Result.Length > #batchLimit"
于 2012-01-11T21:28:01.047 に答える