如何从存储在会话中的记录列表中删除单个记录

How to delete a single record from a list of records stored in a session

我有以下代码 这是我向会话

添加值列表的方法
public ActionResult Add(Product product)
{
 if (Session["AddToCart"] == null)
  {
    Session["AddToCart"] = new List<Product>();
  }
  var list = (List<Product>)Session["AddToCart"];
  list.Add(product);  
}     

但是当会话包含多条记录时如何删除一条记录。我正在尝试传递一个 Id,但它并没有从会话中删除记录。下面是我如何执行下一步。

Public ActionResult Remove(Product product)
{
 Product prod=db.Products.Single(x=>x.Id==product.Id);
 var list=(List<Product>)Session["AddToCart"];
 //Is this the correct approach
 list.Remove(prod);
 }

以上代码无效。我是正确的还是有什么遗漏请更正上面的代码。谢谢

试试这个,

var list=(List<Product>)Session["AddToCart"];
list.RemoveAll(p => p.Id == product.Id);

您选择查找代码为 db.Products.Single(x=>x.Id==product.Id); 的产品可能与会话中的产品不是同一对象。

编辑:

或者您可以实现 IEquatable<Product> 接口。在这种情况下,您的代码也可以工作。

public class Product : IEquatable<Product>
{
    public int Id;

    public bool Equals(Product prod)
    {
        return prod.Id == Id;
    }

    // Rest of the class
}