2010-11-26 61 views
2

est-il possible de retourner 2 sélections avec 1 Iqueryable ... Laissez-moi voir si je peux expliquer .. J'ai une méthode qui retourne essentiellement des enregistrements, mais je l'utilise pour la pagination, je dois aussi retourner le nombre d'enregistrements TOTAL .... Son fonctionnement ... mais plutôt que de créer une classe concrète avec 2 propriétés 1 pour le compte et 1 pour mon choix je préfère rester avec IQueryable mais je suis incertain si ça va marcher?LINQ: renvoyer 2 SELECTs dans 1 IQueryable pour la pagination? Garder dans les lignes avec le modèle de dépôt et ne pas changer le type de retour

Heres un exemple ce qui est renvoyé de mon COUNT

56 

56 fait référence aux dossiers de montant dans le tableau

Et puis mes sélectionner renvoie une page avec un certain nombre d'enregistrements par page à savoir

ID  Name 
32  John 
33  Peter 
34  David 

comme vous pouvez le voir, j'ai en effet 2 sélections - 1 qui retourne la quantité d'enregistrements dans la table et 1 qui renvoie un sous-ensemble d'enregistrements de la table. Bien sûr, j'exécute ces 2 valeurs comme 2 requêtes séparées dans ma méthode (C#) donc j'ai 2 vars iqueryable en vigueur et je dois retourner les deux à partir de la méthode - si cela a du sens?

Je voulais donc garder ma méthode de retour conforme à la norme pour un modèle référentiel c.-à-retour IQueryable - mais comment pourrais-je faire

Je ne voulais pas créer 2 méthodes, 1 pour le retour du comte et l'autre pour retourner le sous-ensemble et comme je dis que je ne voulais pas changer le type de retour à une classe concrète (par exemple) qui a 2 propriétés appelées Count et Data.

Toutes les idées ou informations vraiment apprécié

Merci

Répondre

5

Non, essentiellement. LINQ-to-SQL lui-même prend en charge plusieurs grilles, mais généralement lors de l'appel d'un proc-stocké, et pas via IQueryable<T>. Et puisque vous ne voulez pas changer le schéma, vous ne pouvez pas utiliser un ExecuteQuery<T> effronté avec une colonne fictive. Donc non.

Vous pourrait cependant faire quelque chose comme ce qui suit (qui du mandat de cours de 2 allers-retours au serveur):

public static IQueryable<T> GetPage(this IQueryable<T> query, 
    int skip, int take, out int count) 
{ 
    count = query.Count(); 
    return query.Skip(skip).Take(take); 
} 
+0

Je l'aime !!! totalement cooll .. merci! – Martin