Я использую Cache Aspect с ASP.NET Cache. Мне нужно создать условие на основе ReturnValue.
Я упростил мою проблему. Я использую аспект CacheResult для метода, который возвращает простой объект POCO.
Вот определение:
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.
Я в Google, я могу использовать ключевое слово ReturnValue
примерно так:
Condition = "#ReturnValue != null"
Но я не знаю, как мне получить доступ к MyResponse.MyData.Length
.