[英]C# Entity - Delete Items by ID - ID to delete are in an other list
I need to delete items in a collection managed by Entity 6. The items that have to be deleted are in an other list 我需要删除由实体6管理的集合中的项目。必须删除的项目位于另一个列表中
Currently I do this : 目前我这样做:
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);
This code works fine. 这段代码工作正常。
How to perform the same in only one linq instruction? 如何只在一个linq指令中执行相同的操作?
entity.Courses.RemoveRange(entity.Courses.Where(e => e.Deleted));
Actually, reading your question again, it looks like the list of IDs is in a view model, and possibly your entity model doesn't have the Deleted
property. 实际上,再次阅读您的问题,看起来ID列表在视图模型中,并且您的实体模型可能没有
Deleted
属性。 So presumably you need something rather more like what you had: 因此,大概你需要更像你拥有的东西:
_contexte.Courses.RemoveRange(
_context.Courses.Where(c => model.Courses.Where(x => x.Deleted).Select(y => y.Id).Contains(c.Id));
...or more readably: ......或更可读:
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);
You can use let
to declare your idToDelete
within the query: 您可以使用
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.