comment ajouter une ligne vide dans un IQueryable?
-
07-07-2019 - |
Question
Si vous aviez une variable IQueryable remplie.
Comment ajouteriez-vous une nouvelle entrée vide à la fin de cette liste?
Voici ce que je dois faire:
- s'il y a 2 entrées, ajoutez 3 entrées vides
- s'il y a 0 entrée, ajoutez 5 entrées vides
- s'il y a 5 entrées, ajoutez 5 entrées vides
Vous pouvez maintenant voir le modèle et le remplacer par un répéteur dans asp.net .
Dois-je simplement créer une liste générique (. toList ()) et utiliser la fonctionnalité ajouter ou existe-t-il un meilleur moyen de le faire?
La solution
Eh bien, si vous voulez le convertir en IEnumerable<T>
, vous pouvez utiliser
query.Concat(Enumerable.Repeat(new SomeRow(), 5)
.Take(5);
Notez que cela ajoutera la même ligne supplémentaire 5 fois (puis réduira le total à 5). Cela ne fonctionnera pas si vous devez ensuite pouvoir modifier les lignes. pour ce faire, vous voudriez quelque chose comme:
query.AsEnumerable()
.Concat(Enumerable.Range(1, 5).
.Select(ignored => new SomeRow())
.Take(5);
(Je ne pense pas qu'il existe un moyen plus simple d'appeler la même fonction n
mais je peux me tromper.)
EDIT: j'ai ajouté l'appel à AsEnumerable()
sur la base de commentaires. Appeler AsEnumerable
signifie & "J'ai terminé le bit SQL; faire le reste en cours de traitement. & ";
Autres conseils
Eh bien, je le ferais et utiliserais la propriété Length pour déterminer ce qu'il faut faire ensuite.
Mais si vous ne voulez pas faire cela, vous pouvez créer une Union sur un IEnumerable avec cinq entrées vides, puis effectuer un Take (5) sur le résultat. Semble un peu redondant et pas plus court, cependant.