如何按ID删除元素?

时间:2011-02-21 19:55:59

标签: c# entity-framework

我有一份ids列表

IEnumerable<long> ids

如何从ID匹配的表中删除?

4 个答案:

答案 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();