Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

345
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!