Passer une variable anonyme en paramètre
Bonjour,
Je débute complétement dans l'utilisation de Linq et j'aurai besoin de votre aide pour me défaire d'un problème.
Très simplement, mon code va lire les données d'une table dans une base de données et va les afficher dans un datagrid. Simplement, pour éviter que ce dernier n'affiche les 150 lignes de la table à l'écran, je décide de filtrer la requete par lots de 12 lignes que je fais varier via un système de pagination (je sais que la pagination est inclus de base dans le datagrid, mais là n'est pas le problème, je souhaite juste me perfectionner en Linq).
Donc voilà mon premier code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| maBaseDeDonnees mabdd = new maBaseDeDonnees ();
// Je vais lire les informations des personnes
var listePersonnes = (from pers in mabdd.Personnes
select new
{
Nom = " " + pers.PER_NOM,
Prénom = " " + pers .PER_PRENOM,
Email = " " + pers .PER_EMAIL,
Adresse = " " + pers .PER_ADRESSE
});
// Je compte le nombre d'éléments retournés (pour la pagination)
int nbElements = listeMPI.Count();
// Je filtre sur les 12 premiers éléments
var listeAffichee = (from list in listePersonnes
select list).Take(12);
// J'affiche dans le datagrid
monDataGrid.DataSource = listeAffichee;
monDataGrid.DataBind(); |
Jusque là, tout marche très bien. Là où ça se complique, c'est que j'aimerai que les variables anonymes soient générés dans des fonctions annexes. C'est à dire un truc du genre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| maBaseDeDonnees mabdd = new maBaseDeDonnees ();
// Je vais lire les informations des personnes
var listePersonnes = lireListePersonne();
// Je compte le nombre d'éléments retournés (pour la pagination)
int nbElements = listeMPI.Count();
// Je filtre sur les 12 premiers éléments
var listeAffichee = filtreListe(listePersonnes, 12);
monDataGrid.DataSource = listeAffichee;
monDataGrid.DataBind(); |
le problème c'est pour les fonction lireListePersonne et filtreListe. Je ne sais pas quel type ils doivent retourner (j'ai tenter IQueryable et IEnumerable mais ils ne marchent pas) et je ne sais pas non plus quel type doit prendre filtreListe en paramètre pour listePersonne.
Voilà, si quelqu'un avait la solution, ça m'avancerai pas mal. merci.
PS : Je ne sais pas si vous avez remarqué, mais dans ma première requête, j'ai été obligé de faire
Code:
1 2 3 4 5 6 7
| select new
{
Nom = " " + pers.PER_NOM,
Prénom = " " + pers .PER_PRENOM,
Email = " " + pers .PER_EMAIL,
Adresse = " " + pers .PER_ADRESSE
} |
Pour que mon datagrid modifie les entêtes des colonnes. ça marche, mais si je veux mettre Code Postal, ça ne marche plus car il y a un espace. Comment faire pour modifier les noms des champs avec linq (sans toucher au datagrid) ?