unir truco perfil para paginas pagina nombre fusionar fanpage diferente con como c# merge

c# - truco - Fusionando dos IEnumerable<T> s



truco para fusionar paginas de facebook (3)

Tengo dos IEnumerable<T> s.

Uno se llena con los elementos de reserva. Este siempre contendrá la mayoría de los elementos. El otro se llenará dependiendo de algunos parámetros y posiblemente contendrá menos elementos. Si un elemento no existe en el segundo, necesito completarlo con el equivalente al primero.

Este código hace el trabajo, pero me parece ineficiente y me obliga a convertir los IEnumerables a ILists o a utilizar una lista temporal Person implements IEquatable

IEnumerable<Person> fallBack = Repository.GetPersons(); IList<Person> translated = Repository.GetPersons(language).ToList(); foreach (Person person in fallBack) { if (!translated.Any(p=>p.equals(person))) translated.add(person); }

¿Alguna sugerencia?


Prueba esto.

public static IEnumerable<Person> SmartCombine(IEnumerable<Person> fallback, IEnumerable<Person> translated) { return translated.Concat(fallback.Where(p => !translated.Any(x => x.id.equals(p.id))); }


usa Concat Union no funciona en el caso de tipo List<dynamic>


translated.Union(fallback)

o (si la persona no implementa IEquatable<Person> por ID)

translated.Union(fallback, PersonComparer.Instance)

donde PersonComparer es:

public class PersonComparer : IEqualityComparer<Person> { public static readonly PersonComparer Instance = new PersonComparer(); // We don''t need any more instances private PersonComparer() {} public int GetHashCode(Person p) { return p.id; } public bool Equals(Person p1, Person p2) { if (Object.ReferenceEquals(p1, p2)) { return true; } if (Object.ReferenceEquals(p1, null) || Object.ReferenceEquals(p2, null)) { return false; } return p1.id == p2.id; } }