Digamos que tengo una consulta LINQ como:
var authors = from x in authorsList
where x.firstname == "Bob"
select x;
Dado que authorsListes de tipo List<Author>, ¿cómo puedo eliminar los Authorelementos authorsListque devuelve la consulta authors?
O, dicho de otro modo, ¿cómo puedo eliminar todos los nombres que igualan a Bob authorsList?
Nota: Este es un ejemplo simplificado para los propósitos de la pregunta.

Containsverificación sea rápida y garantiza que solo evalúe la secuencia una vez.List<T>, está bien usarlo.authorsList = authorsList.Where(x => x.FirstName != "Bob")Sería mejor usar List <T> .RemoveAll para lograr esto.
fuente
Si realmente necesita eliminar elementos, ¿qué pasa con Except ()?
Puede eliminar en función de una nueva lista, o eliminar sobre la marcha anidando el Linq.
fuente
Except()es la única forma de ir en medio de la declaración LINQ.IEnumerableno tieneRemove()niRemoveAll().No puede hacer esto con operadores estándar de LINQ porque LINQ proporciona soporte de consulta, no actualización.
Pero puede generar una nueva lista y reemplazar la anterior.
O puede eliminar todos los elementos
authorsen una segunda pasada.fuente
RemoveAll()No es un operador LINQ.Removetambién es un métodoList<T>, no un método System.Linq.Enumerable .Solución simple:
fuente
Me preguntaba si hay alguna diferencia entre
RemoveAllyExceptlas ventajas del usoHashSet, por lo que he realizado una comprobación rápida del rendimiento :)Resultados a continuación:
Como podemos ver, la mejor opción en ese caso es usar
RemoveAll(HashSet)fuente
l2.RemoveAll( new HashSet<string>( toRemove ).Contains );compila bien solo para su informaciónEsta es una pregunta muy antigua, pero encontré una forma muy simple de hacer esto:
Tenga en cuenta que dado que la variable de retorno
authorsListes aList<T>, elIEnumerable<T>devuelto porExcept()debe convertirse en aList<T>.fuente
Puedes eliminar de dos maneras
o
Tuve el mismo problema, si desea una salida simple basada en su condición where, entonces la primera solución es mejor.
fuente
Supongamos que
authorsToRemovees unIEnumerable<T>elemento que contiene los elementos que desea eliminarauthorsList.Luego, aquí hay otra forma muy simple de realizar la tarea de eliminación solicitada por el OP:
fuente
Creo que podrías hacer algo como esto
Aunque creo que las soluciones ya dadas resuelven el problema de una manera más legible.
fuente
A continuación se muestra el ejemplo para eliminar el elemento de la lista.
fuente
LINQ tiene sus orígenes en la programación funcional, que enfatiza la inmutabilidad de los objetos, por lo que no proporciona una forma integrada de actualizar la lista original en el lugar.
Nota sobre la inmutabilidad (tomada de otra respuesta SO):
Aquí está la definición de inmutabilidad de Wikipedia .
fuente
Creo que solo tiene que asignar los elementos de la lista de Autor a una nueva lista para tener ese efecto.
fuente
Para mantener el código fluido (si la optimización del código no es crucial) y necesitaría realizar algunas operaciones adicionales en la lista:
o
fuente