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"

我收到了这个错误:

无法为指定的上下文 [Sample.MyResponse] 解析“MyResponse”节点。

所以我尝试了第二个版本:

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 回答