Pregunta Eliminar elemento de la lista usando linq


¿Cómo eliminar un elemento de la lista usando linq?

Tengo una lista de elementos y cada elemento con una lista de otros elementos ahora quiero ver si otros elementos contienen elementos de la lista aprobada, por lo que el elemento principal debe eliminarse. Por favor, consulte el código para mayor claridad.

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

}

13
2017-10-19 13:27


origen


Respuestas:


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

21
2017-10-19 13:29



Solo para señalar, LINQ es para consultar datos y en realidad no eliminará el elemento del contenedor original. Tendrás que usar _lstBase.Remove(item) en el final. Lo que puedes hacer es usar LINQ para encontrar esos artículos.

Supongo que está utilizando algún tipo de patrón INotify en el que se está rompiendo el patrón para reemplazar _lstBase con una versión filtrada de sí mismo. Si puedes reemplazar _lstBase, ve con la respuesta de @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);
}

7
2017-10-19 14:10



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

o

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

3
2017-10-19 13:32