Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

359
Vistas
Seleccione todo de una Lista, reemplace los valores que existen en otra Lista

Hace unos días hice la misma pregunta con SQL, pero ahora surge en código C#

Digamos que tenemos este tipo de clase para contener diferentes pares de id/texto:

 public class Text { public int id { get; set; } public string text { get; set; } ... }

Ahora completemos algunos datos, ListA obtiene muchos datos:

 List<Text> ListA = new List<Text>{ new () {id = 1, text = "aaa1"}, new () {id = 2, text = "aaa2"}, new () {id = 3, text = "aaa3"}, new () {id = 4, text = "aaa4"}, new () {id = 5, text = "aaa5"}, new () {id = 6, text = "aaa6"}, };

Y ListB obtiene solo un poco de información:

 List<Text> ListB = new List<Text>{ new () {id = 4, text = "bbb4"}, new () {id = 5, text = "bbb5"}, };

Y ahora lo que estamos buscando:

 var result = ... // Some Linq or Lambda magic goes here // and if we do: foreach(var item in result){ Console.WriteLine(item.Id + " " + item.Text); } // Result will be: 1 : aaa1 2 : aaa2 3 : aaa3 4 : bbb4 5 : bbb5 6 : aaa6
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puedes intentar buscar id dentro de ListB :

 var result = ListA .Select(a => ListB.FirstOrDefault(b => b.id == a.id) ?? a);

Aquí, para cada a dentro de ListA , tratamos de encontrar el elemento correspondiente por id ( b.id == a.id ) dentro de ListB . Si no se encuentra tal elemento, simplemente devolvemos el elemento ListA : ?? item

En el caso de .Net 6, puede usar la versión sobrecargada .FirstOrDefault (podemos pasar a como valor predeterminado):

 var result = ListA .Select(a => ListB.FirstOrDefault(b => a.id == b.id, a));
over 4 years ago · Santiago Trujillo Denunciar

0

Podría ser más eficiente convertir ListB en un diccionario primero: var dictB = ListB.ToDictionary(x=> x.id)

Entonces puedes escribir

var result = ListA.Select(x => dictB.TryGetValue(x.id, out var b) ? b : x)

UPD Reescrito teniendo en cuenta las sugerencias de comentarios

over 4 years ago · Santiago Trujillo Denunciar

0

Una opción es realizar una operación de Union , especificando un EqualityComparer . Si el pedido es importante, puede realizar una operación OrderBy al final.

 class TextIdComparer : EqualityComparer<Text> { public override bool Equals(Text x, Text y) => x.id == y.id; } var result = ListB.Union(ListA, new TextIdComparer()).OrderBy(x => x.id)
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda