2015-12-02 56 views
3

我需要通過實體6.必須刪除的項目管理的集合中刪除項目在其他列表C#實體 - 通過ID刪除項目 - ID刪除是在其他列表

目前我這樣做:

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指令中執行相同操作?

回答

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