我正在查看一個問題,我希望從昂貴的服務調用中獲取一個集合,然後將其存儲在緩存中,以便它可以用於用戶界面上的後續操作。我正在使用的代碼如下: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