Comment fusionner deux listes IQueryable

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

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

et

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

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

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 renvoie une nouvelle séquence. Alors essayez 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 par Distinct .

Même

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

ne fonctionne pas?

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

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

Essayez aussi:

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

Une autre option que j’ai trouvée:
Déclarer:
IEnumerable usersIds = new int[0];
Par exemple dans une boucle:

 foreach (var id in Ids) { IQueryable _usersIds = bl.GetUsers(id).Select(x => x.UserID); usersIds = usersIds.Concat(_usersIds); } var ids = usersIds.Distinct(); 

Maintenant, usersIds et ids (distincts) contiennent l’identifiant de tous les utilisateurs comme IEnumerable -int-