2009-09-14 6 views
0

Si vous avez rempli une variable IQueryable.comment ajouter une ligne vide dans un IQueryable?

Comment ajouter une nouvelle entrée vide à la fin de cette liste?

Voici ce que je dois faire:

  1. s'il y a 2 entrée, ajoutez 3 entrée vide
  2. s'il y a 0 entrée, ajouter 5 entrée vide
  3. s'il y a 5 entrée, ajouter 5 entrée vide

Vous pouvez maintenant voir le modèle et il est pour un répéteur dans asp.net.

Dois-je créer simplement une liste générique (.ToList()) et utiliser la fonctionnalité ajouter ou est-il une meilleure façon de le faire?

+0

@Fredou: Juste au cas où vous ne regardez pas les commentaires - j'ai édité ma réponse maintenant. –

Répondre

1

Eh bien, si vous êtes heureux de 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 couper le total à 5). Cela ne fonctionnera pas si vous devez ensuite pouvoir modifier les lignes; de le faire, vous voulez quelque chose comme:

query.AsEnumerable() 
    .Concat(Enumerable.Range(1, 5). 
         .Select(ignored => new SomeRow()) 
    .Take(5); 

(je ne pense il y a un moyen plus simple d'appeler n fois la même fonction, mais je peux me tromper.)

EDIT : J'ai ajouté l'appel à AsEnumerable() sur la base de commentaires. Fondamentalement appeler AsEnumerable signifie "J'ai terminé le bit SQL, faire le reste en cours."

+0

DAMNIT SKEET! Plus vite et avec du code! J'allais ouvrir pop LINQpad et éditer ma réponse, mais l'oublier maintenant! – Will

+0

à la fin, j'ai utilisé toList parce que la solution de concat m'a donné cette erreur: "La séquence locale ne peut pas être utilisée dans l'implémentation LINQ à SQL des opérateurs de requête à l'exception de l'opérateur Contains()." juste après que je fasse quelque chose avec la variable IEnumerable – Fredou

+0

j'aurais dû spécifier linq-à-sql, pas linq dans l'étiquette, désolé – Fredou

1

Eh bien, je le résumerais et utiliser la propriété Length pour déterminer ce qu'il faut faire ensuite. Mais, si vous ne voulez pas faire cela, vous pouvez faire une union sur un IEnumerable avec cinq entrées vides et faire un Take (5) sur le résultat. Semble un peu redondant et pas plus court, tho.

Questions connexes