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)
上面接受的答案已过时,因为语法已被弃用,而不是删除简单查询:
db.Customers.Where(c => c.State == '-1').Delete();
Run Code Online (Sandbox Code Playgroud)
db.Customers.Where(c => c.State == '-1').ToList().ForEach(db.DeleteObject);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
应该是你所需要的一切.