如何使用ObjectContext删除对象列表?

Joe*_*ang 12 entity-framework objectcontext

假设你有这样的代码.

using (CustomerContext db = new CustomerContext())
{
   var foundCustList=db.Customers.Where(c=>c.State=='-1').ToList();//Find all the customer which State is -1
   foreach(var c in foundCustList)
   {
       db.DeleteObject(c);
   }
   db.SaveChanges();//After all the customer is deleted, Commit.
}
Run Code Online (Sandbox Code Playgroud)

但我想知道有没有办法轻松删除对象列表?我不想foreach一个接一个地使用它来做列表.谢谢.

Ser*_*kiy 15

您可以使用Nuget提供的EntityFramework.Extended库(不要忘记添加using EntityFramework.Extensions;):

db.Customers.Delete(c => c.State == '-1');
Run Code Online (Sandbox Code Playgroud)

或者您可以手动编写扩展方法:

public static void DeleteObjects<T>(this ObjectSet<T> set, 
                                    IEnumerable<T> entities)
    where T : EntityObject
{
    foreach (var entity in entities)
        set.DeleteObject(entity);
}
Run Code Online (Sandbox Code Playgroud)

用法:

var customersToDelete = db.Customers.Where(c => c.State == '-1');
db.Customers.DeleteObjects(customersToDelete);
Run Code Online (Sandbox Code Playgroud)

或者更好的一个:

public static void DeleteObjects<T>(this ObjectSet<T> set, 
                                    Expression<Func<T, bool>> predicate)
    where T : EntityObject
{
    foreach (var entity in set.AsQueryable<T>().Where(predicate))
        set.DeleteObject(entity);
}
Run Code Online (Sandbox Code Playgroud)

用法:

db.Customers.DeleteObjects(c => c.State == '-1');
Run Code Online (Sandbox Code Playgroud)


iGa*_*nja 9

上面接受的答案已过时,因为语法已被弃用,而不是删除简单查询:

db.Customers.Where(c => c.State == '-1').Delete();
Run Code Online (Sandbox Code Playgroud)


Sid*_*gal 6

db.Customers.Where(c => c.State == '-1').ToList().ForEach(db.DeleteObject);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

应该是你所需要的一切.