es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comparar dos EntityCollections en C# para encontrar similitudes.

Tengo 2 colecciones.

  • Lista con todos los costos adicionales de una capacitación.
  • Lista con los costos adicionales de un aprendiz.

Necesitaría comparar y obtener todos los costos adicionales encontrados en ambas colecciones.

Esto es lo que intenté:

“`c#
foreach (var extrakost in opleidingExtraKostResult.Entities)
{
if (extrakost.Attributes.Values.SequenceEqual(cursistExtraKosts.Entities.First().Attributes.Values))
{
EntityCollection similarCollection = new EntityCollection();
similarCollection.Entities.Add(extrakost);
}
}


Creo que el problema al que me enfrento es que `cursistExtraKosts.Entities.First().Attributes.Values` es un arreglo de entidades de costos adicionales. ¿Entonces estoy comparando una entidad con un arreglo de entidades? EDICIÓN: Lo hice funcionar de esta manera: ```c# EntityCollection similarCollection = new EntityCollection(); foreach (var extrakost in opleidingExtraKostResult.Entities) { foreach (var traineeExtraKost in cursistExtraKosts.Entities) { if (traineeExtraKost.Id==extrakost.Id) { similarCollection.Entities.Add(extrakost); } } }

Un pequeño pajarito me dice que este no es el camino a seguir (mala performance). Por favor sugiera mejores métodos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información, existen mejores métodos para comparar y recuperar costos adicionales encontrados en ambas colecciones:

    • LINQ (Consulta Integrada en el Lenguaje): Esta es una herramienta poderosa que puede utilizarse para comparar y recuperar datos de colecciones. Con LINQ, puedes unir dos colecciones basándote en un atributo común y fácilmente obtener los costos adicionales encontrados en ambas colecciones. Aquí tienes un ejemplo:

    “`c#
    var commonExtraCosts = opleidingExtraKostResult.Entities.Join(
    cursistExtraKosts.Entities,
    oek => oek.Attributes[“name”].ToString(),
    cek => cek.Attributes[“name”].ToString(),
    (oek, cek) => oek
    ).ToList();


    Con este código, unimos las dos colecciones basándonos en el atributo "name" y obtenemos los costos adicionales comunes encontrados en ambas colecciones. Esto es más eficiente que iterar a través de las colecciones. - HashSet (Conjunto Hash): Otra forma de comparar y recuperar datos de colecciones es utilizando HashSet. Con HashSet, puedes encontrar fácilmente los elementos comunes en ambas colecciones. Aquí tienes un ejemplo: ```c# var opleidingExtraKostHashSet = new HashSet<entity>(opleidingExtraKostResult.Entities); var commonExtraCosts = new EntityCollection(); foreach (var traineeExtraKost in cursistExtraKosts.Entities) { if (opleidingExtraKostHashSet.Contains(traineeExtraKost)) { commonExtraCosts.Entities.Add(traineeExtraKost); } }

    Con este código, agregamos los elementos de la primera colección a un HashSet y comprobamos si la segunda colección contiene alguno de los elementos en el HashSet. Esto es más eficiente que iterar a través de ambas colecciones.

Comments are closed.