鉴于
List<LabEntity> selected = originalSettings.SelectedInstanceLabs;
List<LabEntity> available = Presenter.GetLabs(dateRange);
if (!firstLoad)
{
//Remove selected labs from the available labs
available.Remove(?);// Remove Where selected.Id = available.Id
}
是否有可以完成多项任务的扩展方法?仅删除一次只能处理一个。其他删除类型的方法也不适合任务。我可以在那里坚持一个foreach,但是必须有一个更简洁的实现。
答案 0 :(得分:6)
当然可以!
available.RemoveAll( ~delegate goes here~)
喜欢的东西;
available.RemoveAll(a => selected.Exists(s => s.Id == a.Id));
请原谅我的4.0委托语法,不知道你使用的是什么版本......
修改:从评论更新(@vcsjones)
答案 1 :(得分:3)
List<LabEntity> selected = originalSettings.SelectedInstanceLabs;
List<LabEntity> available = Presenter.GetLabs(dateRange);
if (!firstLoad)
{
//Remove selected labs
available = available.Except<LabEntity>(selected).ToList();
}
答案 2 :(得分:0)
如果您对LINQ感到满意,可以在开头过滤它们:
var selectedSet = HashSet<LabEntry>(selected);
var available = Presenter.GetLabs(dateRange).Where(l => !selectedSet.Contains(l));
或者你可以过滤post hoc:
available.RemoveAll(l => selectedSet.Contains(l));
在这两者中,第一个应该更快,因为它避免了仅仅为了从中删除项目而创建一个集合。
答案 3 :(得分:0)
沿着这些方向做的事情就是这样:
available.RemoveAll(x => selected.Contains(y => (y.Id == x.Id)));