我正在查看一个问题,我希望从昂贵的服务调用中获取一个集合,然后将其存储在缓存中,以便它可以用于用户界面上的后续操作。我正在使用的代码如下:MemoryCache意外覆盖
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操作影响缓存的版本。即我希望缓存版本始终反映服务调用返回的完整数据集。然后,我希望在设置过滤器并应用它时从缓存中检索此集合,但这不应更改缓存的数据 - 即后续过滤器应发生在整个数据集上 - 那么执行此操作的最佳方法是什么?
感谢就像一个魅力:)! – user1133512 2012-03-19 05:26:50