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
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-