我有一个List
的“小部件”(有一个int ID)和一个List
个选定的ID。我的最终目标是拥有一个水合小部件列表,它与我的“集合”中的ID列表一致。
public List<Widget> widgets { get; set; }
public List<int> widgetIds
{
get
{
return widgets.Select(x => x.widgetId).ToList();
}
set
{
foreach (int addId in value.Except(widgets.Select(x => x.widgetId)))
{
widgets.Add(_dbWidgetHelper.getWidget(addId));
}
//I need to invert the add somehow
}
}
我一直在尝试使用RemoveAll
和Except
所能想到的一切,但我还是无法解决问题。我知道这可以在一行中完成,但我最接近的是:
var removeIds = widgets.Select(x => x.widgetId).Except(value);
//this is me trying anything I can think of... obviously a syntax error.
widgets.RemoveAll(x=>x.widgetId in removeIds);
答案 0 :(得分:2)
尝试以下方法。请注意,我将removeIds
更改为HashSet<int>
,以防止每次重新评估查询并更快地查找
var removeIds = new HashSet<int>(widgets.Select(x => x.widgetId).Except(value));
widgets.RemoveAll(x => removeIds.Contains(x.widgetID));