更新包含员工集合的缓存对象

时间:2014-11-25 11:39:37

标签: c# asp.net linq caching memorycache

在更新特定员工详细信息后,我在MemoryCache.Now内存储了一系列员工,我希望使用更新的员工详细信息更新相同缓存对象。这样的事情:

var AllEmployees= cache.Get("AllEmployees");
if(AllEmployees != null)
{
       var empToUpdate = AllEmployees.FirstOrDefault(i => i.EmpId== Employee.EmpId);
       if (empToUpdate != null)
       {
           AllEmployees.Remove(empToUpdate );
           AllEmployees.add(empToUpdate ); 
      }
}

但由于缓存是内存缓存而且缓存IEnumerable<Employee>,我无法直接操作缓存对象。我无法调用这些方法 FirstOrDefault,Remove,Add

1 个答案:

答案 0 :(得分:0)

正如我的评论所述,我无法看到不使用FirstOrDefault的理由。 IEnumebles无法修改。所以你必须采用沉重,性能非常好的方式并创建一个没有特定项目的新IEnumerable( IENumerable.Except(要排除的项目数组))然后你要用另一个序列连接它,其中包含你的要添加的新元素。

   var empToUpdate = AllEmployees.FirstOrDefault(i => i.EmpId== Employee.EmpId);
   if (empToUpdate != null)
   {
      AllEmployees = AllEmployees.Except(new[]{empToUpdate}).Concat(new[] { empToUpdate});
  }

无论如何我在这段代码中没有看到任何意义,因为你正在移除对象并立即再次添加它。