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

本文关键字:缓存 对象 集合 包含员 更新 | 更新日期: 2023-09-27 18:31:57

我有一个员工集合,在更新特定员工详细信息后存储在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>,因此我无法直接操作缓存对象。我无法将这些方法称为 FirstDefault,删除,添加

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

正如我的评论中提到的,我看不出不使用FirstOrDefault的理由。IEnumerables是不可修改的。因此,您必须采取一种繁重的,性能上不受欢迎的方式,创建一个没有特定项目的新IEnumerable(IENumerable.Except(要排除的项目数组)),然后您将将其与另一个后续连接,其中包含要添加的新元素。

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

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