使用ID和linq从列表中删除项目

时间:2014-01-30 23:32:58

标签: c# linq

我有一个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
    }
}

我一直在尝试使用RemoveAllExcept所能想到的一切,但我还是无法解决问题。我知道这可以在一行中完成,但我最接近的是:

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

1 个答案:

答案 0 :(得分:2)

尝试以下方法。请注意,我将removeIds更改为HashSet<int>,以防止每次重新评估查询并更快地查找

var removeIds = new HashSet<int>(widgets.Select(x => x.widgetId).Except(value));

widgets.RemoveAll(x => removeIds.Contains(x.widgetID));