У меня есть List
из «виджета» (которые имеют идентификатор int) и List
выбранных идентификаторов. Моя конечная цель - иметь список гидратированных виджетов, которые согласуются с списком идентификаторов внутри моего «набора».Удалите элементы из списка, используя их идентификаторы и linq
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);
это может быть объединены в 1-лайнер? стоит ли производительность/удобочитаемость? – pennstatephil
ОК, я посмотрел на 'widgets.RemoveAll (x => widgets.Select (y => y.widgetId) .Except (value) .Contains (x.widgetId)); и он мгновенно дал мне головную боль, поэтому я Я скажу, что он не прошел проверку на читаемость. – pennstatephil