Ответ 1
_lstBase
.RemoveAll(a => a.Appointmerts.Any(item => appointmentsToCheck.Contains(item)));
Как удалить элемент из списка с помощью linq?.
У меня есть список элементов и каждый элемент, у меня есть список других элементов, теперь я хочу, чтобы другие элементы содержали все элементы переданного списка, поэтому основной элемент должен быть удален. Пожалуйста, проверьте код для большей ясности.
public Class BaseItems
{
public int ID { get; set; }
public List<IAppointment> Appointmerts { get; set; }
}
Public DeleteApp(List<IAppointment> appointmentsToCheck)
{
List<BaseItems> _lstBase ; // is having list of appointments
//now I want to remove all items from _lstBase which _lstBase.Appointmerts contains
any item of appointmentsToCheck (appointmentsToCheck item and BaseItems.Appointmerts
item is having a same reference)
//_lstBase.RemoveAll(a => a.Appointmerts.Contains( //any item from appointmentsToCheck));
}
_lstBase
.RemoveAll(a => a.Appointmerts.Any(item => appointmentsToCheck.Contains(item)));
Чтобы указать, LINQ предназначен для запроса данных, и вы фактически не удаляете элемент из исходного контейнера. Вам нужно будет использовать _lstBase.Remove(item)
в конце. Вы можете использовать LINQ для поиска этих элементов.
Я предполагаю, что вы используете какой-то шаблон INotify, где он является шаблоном для замены _lstBase
с помощью отфильтрованной версии самого себя. Если вы можете заменить _lstBase
, перейдите к @JanP. Ответ.
List<BaseItems> _lstBase ; // populated original list
Public DeleteApp(List<IAppointment> appointmentsToCheck)
{
// Find the base objects to remove
var toRemove = _lstBase.Where(bi => bi.Appointments.Any
(app => appointmentsToCheck.Contains(app)));
// Remove em!
foreach (var bi in toRemove)
_lstBase.Remove(bi);
}
var data =
_lstBase.
Except(a => a.Appointmerts.Any
(item => appointmentsToCheck.Contains(item)));
или
var data =
_lstBase.
Where(a => !a.Appointmerts.Any
(item => appointmentsToCheck.Contains(item)));