web-dev-qa-db-fra.com

Comment fusionner deux listes IQueryable

Je veux fusionner les enregistrements de deux listes IQueryable en C #. J'essaie

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Concat(obj1);

et

IQueryable<MediaType> list1 = values;
IQueryable<MediaType> list2 = values1;
obj.Union(obj1);

mais si list1 est vide alors la liste résultante est également vide. Dans mon cas, soit list1 peut être vide mais list2 peut avoir des enregistrements. Comment dois-je les fusionner?

47
Fraz Sundal

Vous n'utilisez pas la valeur de retour - comme tous les autres opérateurs LINQ, la méthode ne change pas la séquence existante - elle retourne une séquence new. Essayez donc ceci:

var list3 = list1.Concat(list2);

ou

var list4 = list1.Union(list2);

Union est une opération définie - elle renvoie des valeurs distinctes.

Concat renvoie simplement les éléments de la première séquence suivis des éléments de la deuxième séquence; la séquence résultante peut inclure des éléments en double.

Vous pouvez penser à Union comme Concat suivi de Distinct.

74
Jon Skeet

Même

var result = Enumerable.Concat(list1, list2);

ne fonctionne pas?

Et assurez-vous que les listes sont vides et non nulles:

var result = Enumerable.Concat(
    list1 ?? Enumerable.Empty<MediaType>()
    list2 ?? Enumerable.Empty<MediaType>());

Essayez aussi:

var result = Enumerable.Concat(
    list1.AsEnumerable(),
    list2.AsEnumerable());
2
abatishchev