Quiero cambiar algunas propiedades de un objeto de resultado de consulta LINQ sin crear un nuevo objeto y configurar manualmente cada propiedad. es posible?
Ejemplo:
var list = from something in someList
select x // but change one property
Respuestas:
No estoy seguro de cuál es la sintaxis de la consulta. Pero aquí está el ejemplo de expresión LINQ expandida.
Lo que esto hace es usar un método anónimo vs y expresión. Esto le permite usar varias declaraciones en una lambda. Por lo tanto, puede combinar las dos operaciones de establecer la propiedad y devolver el objeto a este método algo sucinto.
fuente
ToList()
antes parece ser el truco. Aunque no estoy seguro de por qué lo entiendes. Si es Entity Framework, tampoco funciona con eso.Si solo desea actualizar la propiedad en todos los elementos, entonces
fuente
Prefiero éste. Se puede combinar con otros comandos linq.
fuente
No debería haber ninguna magia LINQ que te impida hacer esto. Sin embargo, no use la proyección que devolverá un tipo anónimo.
Eso modificará el objeto real, así como:
fuente
No es posible con los operadores de consulta estándar: es Language Integrated Query, no Language Integrated Update. Pero podría ocultar su actualización en métodos de extensión.
Ahora puede usarlo de la siguiente manera.
fuente
UPDATE
,DELETE
, yINSERT
. Así que no diría que la semántica es lo que impide esta función.Si desea actualizar elementos con una
Where
cláusula, el uso de .Where (...) truncará sus resultados si lo hace:Puede hacer actualizaciones a elementos específicos en la lista de la siguiente manera:
Siempre devuelva el artículo, incluso si no realiza ningún cambio. De esta manera se mantendrá en la lista.
fuente
A menudo nos encontramos con esto donde queremos incluir un valor de índice y el primer y último indicador en una lista sin crear un nuevo objeto. Esto le permite conocer la posición del elemento en su lista, enumeración, etc. sin tener que modificar la clase existente y luego saber si está en el primer elemento de la lista o en el último.
Simplemente puede extender cualquier clase usando:
fuente
Como no encontré la respuesta aquí, que considero la mejor solución, a mi manera:
Usar "Seleccionar" para modificar datos es posible, pero solo con un truco. De todos modos, "Seleccionar" no está hecho para eso. Simplemente ejecuta la modificación cuando se usa con "ToList", porque Linq no se ejecuta antes de que se necesiten los datos. De todos modos, la mejor solución es usar "foreach". En el siguiente código, puedes ver:
Antes de "foreach", también puede hacer una selección de linq ...
fuente
Obtendría el
item
, y luego podría haceritem.prop1=5;
para cambiar la propiedad específica.¿O desea obtener una lista de elementos de la base de datos y hacer que cambie la propiedad
prop1
de cada elemento de esa lista devuelta a un valor especificado? Si es así, podrías hacer esto (lo estoy haciendo en VB porque lo sé mejor):(
list
contendrá todos los artículos devueltos con sus cambios)fuente
for each
bucle.En 2020 utilizo el
MoreLinq
Pipe
método. https://morelinq.github.io/2.3/ref/api/html/M_MoreLinq_MoreEnumerable_Pipe__1.htmfuente
fuente