我将缓存方面与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]。
所以我尝试了第二个版本:
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
。
答案 0 :(得分:3)
评估条件表达式的上下文是返回值,所以只需执行以下操作:
Condition = "Result.Length > #batchLimit"
相当于
Condition = "#root.Result.Length > #batchLimit"