2008-10-21 6 views
1

Je construis un ObjectQuery comme celui-ci:Comment compter combien d'objets seront renvoyés par une ObjectQuery <T>?

 string query = "select value obj from Entities.Class as obj " + 
         "where obj.Property = @Value"; 

     ObjectQuery<Class> oQuery = new ObjectQuery<Class>(query, EntityContext.Instance); 
     oQuery.Parameters.Add(new ObjectParameter("Value", someVariable)); 

Je peux maintenant assigner cet objet comme source de données pour un contrôle, ou itérer avec une boucle foreach ou même forcer une matérialisation à une liste, cependant, je ne peux que je compte le nombre d'objets qui seront retournés, sans forcer une matérialisation? Est-ce que je dois créer une requête compagnon qui va exécuter count() ou existe-t-il une fonction qui va le faire quelque part pour moi?

Merci.

Répondre

3

ObjectQuery<T> implémente IQueryable<T>, ne peut donc pas vous suffit d'utiliser la méthode d'extension:

int count = oQuery.Count(); 

Qu'advient-il si vous exécutez cela? Je m'attendais à ce que la requête globale fasse juste un Count() ... (pas que j'ai fait beaucoup EF ...).

+0

Cela a fonctionné pour moi, mais j'ai eu beaucoup de mal à exposer la méthode Count(). Si quelqu'un se trouve dans une situation où ObjectQuery.Count() n'est pas disponible, n'oubliez pas d'inclure System.Linq dans la classe. Cela m'a bloqué pendant un moment car j'avais supprimé des instructions using inutilisées plus tôt et mes options Intellisense pour mon objet ObjectQuery étaient un sous-ensemble de ce qui est disponible. –

1

La classe ObjectQuery <T> implémente l'interface IEnumerable <T>, qui prend en charge la méthode Count().

Qu'est-ce que vous obtenez de cela?

int count = oQuery.Count(); 
+0

Notez que Enumerable.Count() * forcera les données à charger; vous auriez besoin de Queryable.Count() pour obtenir le comportement composable. –

0

Si le nombre est inférieur à 1 alors il a trouvé un nouvel enregistrement, sinon, il a déjà cet enregistrement.

Questions connexes