Подтвердить что ты не робот

Удалить элемент из списка, используя linq

Как удалить элемент из списка с помощью 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));

}
4b9b3361

Ответ 1

_lstBase
    .RemoveAll(a => a.Appointmerts.Any(item => appointmentsToCheck.Contains(item)));

Ответ 2

Чтобы указать, 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);
}

Ответ 3

var data = 
   _lstBase.
    Except(a => a.Appointmerts.Any
        (item => appointmentsToCheck.Contains(item)));

или

var data = 
   _lstBase.
    Where(a => !a.Appointmerts.Any
        (item => appointmentsToCheck.Contains(item)));