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

时间:2015-01-26 06:55:24

标签: linq asp.net-mvc-4

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

添加值列表
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);
 }

以上代码不起作用。我是否正确或是否有任何缺失PLZ纠正上述代码。感谢。

1 个答案:

答案 0 :(得分:1)

试试这个,

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
}