2012-01-06 87 views
0

我已成功选择要删除的对象。但问题是当我从Object数组中删除一个项目时,它没有做任何改变。我的代码如下以下..MVC3:从所选对象数组中删除数据库中的对象

我的数据库

public List<Product> db = new ProductRepository().GetProducts(); 

这表明所有复选框产品..

public ActionResult MultipleDeletes() 
     { 
      return View(db); 
     } 

在提交“命名的删除按钮”,我有问题。

[HttpPost] 
     public ActionResult MultipleDeletes(int[] selectedProducts) 
     { 
      var del_products = from x in selectedProducts 
          from y in db 
          where y.ProductId == x 
          select y; 

      foreach (var item in del_products) 
      { 
       //Product p = db.Find(item.ProductId); 
       //db.Remove(p); 
       //db.SaveChanges(); 
      }      

      return View(db); 
     } 

任何人都可以帮助我吗? 你能告诉我,如何编写Lambda表达式而不是LinQ?

+1

这个问题实际上并不是关于MVC它关于您的ERM框架。你使用哪种数据库访问技术? – 2012-01-06 08:18:44

+0

我正在使用.sdf。 – 2012-01-06 08:34:24

+0

这就是你的实际数据库文件,你如何访问数据库?你使用实体框架或LINQ到SQL或其他ORM? – 2012-01-06 08:42:11

回答

0

的问题是在模型中。我用NBuilder ..所以它并没有真正保存数据。 我建立了一个DbContext。然后它工作。 解决方案是..

public ProductDBContext db = new ProductDBContext(); 


     [HttpPost] 
     public ActionResult MultipleDeletes(int[] selectedProducts) 
     { 
      foreach (int item in selectedProducts) 
      { 
       Product product = db.Where(p => p.ProductId == item).SingleOrDefault(); 
       db.Remove(product); 
       db.SaveChanges(); 
      } 
      return View(); 
     } 
0

我认为在这种情况下,您需要使用删除而不是删除。

使用下面,看看它是否工作

db.DeleteObject(p) 
db.SaveChanges() 
+0

我已经从上一行中获得了。 Product p = db.Find(item.ProductId)..它说find有一些无效的参数。然后.DeleteObject不会出现在Intellisense中。 – 2012-01-06 08:33:47