Я смотрю на проблему, когда я хочу получить коллекцию из дорогостоящего вызова службы, а затем сохранить ее в кэше, чтобы ее можно было использовать для последующих операций в пользовательском интерфейсе.Я использую следующий код:
List<OrganisationVO> organisations = (List<OrganisationVO>)MemoryCache.Default["OrganisationVOs"];
List<Organisation> orgs = new List<Organisation>();
if (organisations == null)
{
organisations = new List<OrganisationVO>();
orgs = pmService.GetOrganisationsByName("", 0, 4000, ref totalCount);
foreach (Organisation org in orgs)
{
OrganisationVO orgVO = new OrganisationVO();
orgVO = Mapper.ToViewObject(org);
organisations.Add(orgVO);
}
MemoryCache.Default.AddOrGetExisting("OrganisationVOs", organisations, DateTime.Now.AddMinutes(10));
}
List<OrganisationVO> data = new List<OrganisationVO>();
data = organisations;
if (!string.IsNullOrEmpty(filter) && filter != "*")
{
data.RemoveAll(filterOrg => !filterOrg.DisplayName.ToLower().StartsWith(filter.ToLower()));
}
Проблема, с которой я сталкиваюсь, заключается в том, что операция data.RemoveAll влияет на кэшированную версию.т.е. я хочу, чтобы кэшированная версия всегда отражала полный набор данных, возвращаемый вызовом службы.Затем я хочу извлекать эту коллекцию из кэша всякий раз, когда фильтр установлен, и применять его, но это не должно изменять кэшированные данные - т.е. последующие фильтры должны выполняться в полном наборе данных - каков наилучший способ сделать это?