C#实体-按ID删除项目-要删除的ID在另一个列表中

本文关键字:ID 另一个 列表 实体 删除项目 删除 | 更新日期: 2023-09-27 18:25:15

我需要删除实体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指令中执行相同的操作?

C#实体-按ID删除项目-要删除的ID在另一个列表中

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);

您可以使用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);