C#实体 - 按ID删除项目 - 要删除的ID位于其他列表中

时间:2015-12-02 09:16:13

标签: c# entity-framework linq

我需要删除由实体6管理的集合中的项目。必须删除的项目位于其他列表中

目前我这样做:

 idToDelete = model.Courses.Where(x => x.Deleted).Select(x => x.Id);

 entity.Courses
        .Where(ent => idToDelete.Contains(ent.Id))
        .ToList()
        .ForEach(ent =>
        _contexte.Entry(ent).State = EntityState.Deleted);

此代码工作正常。

如何只在一条linq指令中执行相同操作?

2 个答案:

答案 0 :(得分:3)

entity.Courses.RemoveRange(entity.Courses.Where(e => e.Deleted));

实际上,再次阅读您的问题,看起来ID列表在视图模型中,并且您的实体模型可能没有Deleted属性。因此,大概你需要更像你拥有的东西:

_contexte.Courses.RemoveRange(
    _context.Courses.Where(c => model.Courses.Where(x => x.Deleted).Select(y => y.Id).Contains(c.Id));

...或更可读:

var idsToDelete = model.Courses.Where(c => c.Deleted).Select(e => e.Id);
var entitiesToDelete = _contexte.Courses.Where(c => idsToDelete.Contains(c.Id));
_contexte.Courses.RemoveRange(entitiesToDelete);

答案 1 :(得分:0)

您可以使用let在查询中声明idToDelete

(from ent in in entity.Courses
 let idsToDelete = model.Courses.Where(x => x.Deleted).Select(x => x.Id)
 where idsToDelete.Contains(ent.Id)
 select ent).ToList()
 .ForEach(ent => _contexte.Entry(ent).State = EntityState.Deleted);