我有一份ids列表
IEnumerable<long> ids
如何从ID匹配的表中删除?
答案 0 :(得分:5)
根据MSDN文档的“标准”方法是使用这些ID来提取每个对象,然后使用DeleteObject命令删除它们:
context.Where(x=>ids.Contains(x.Id)).ToList().ForEach(context.DeleteObject);
这将为DB产生N + 1个往返。这是ORM的共同缺点;它们在应用程序的日常使用中占99%(查询结果,创建/更新/删除单个对象),但并不是真正适用于这些批量操作。
您还可以使用ExecuteStoreCommand构建查询,其中"DELETE FROM table WHERE id IN @p1"
并指定ID列表作为参数。
答案 1 :(得分:0)
假设您的实体中有Id
作为主键,并且您有一个名为SampleEntity
的实体,您可以执行以下操作:
foreach(long id in ids)
{
var sampleEntity = context.SampleEntities.SingleOrDefault( e => e.Id == id);
if(sampleEntity!=null)
context.SampleEntities.DeleteObject(sampleEntity);
}
context.SaveChanges();
EF不支持批量操作,因此您必须逐个删除实体,或者执行直接存储查询(SQL)以进行删除。
答案 2 :(得分:0)
一般地
var db = GetYourDBContext();
var ItemsToDelete = (from id in ids
from item in db.TableWithItems
where item.id == id
select item).ToList();
foreach (Item item in ItemsToDelete)
db.DeleteObject(item);
db.SaveChanges();
答案 3 :(得分:0)
怎么样,
context.Entities.Where(e => ids.Contains(e.id))
.ToList()
.ForEach(e => context.SampleEntities.DeleteObject(e) );
context.saveChanges();