2016-06-15 1 views
1

J'écris une requête paginée dans OrmLite de ServiceStack, en sélectionnant le nombre total d'enregistrements et les identifiants des enregistrements dans la plage de pages. En supposant query est une SqlExpression arbitraire choix d'un groupe d'enregistrements:Comment puis-je COUNT (DISTINCT) dans ServiceStack Ormlite?

var idQuery = query.SelectDistinct(r => r.Id); 
var ids = Db.Column<int>(idQuery.Skip(request.Skip).Take(request.Take)); 
var total = Db.Count(idQuery); 

OrmLite génère deux requêtes, l'une pour les ids:

SELECT DISTINCT ... 

Et un pour le total:

SELECT COUNT(*) 

I Essayez d'obtenir OrmLite pour générer SELECT COUNT(DISTINCT Id) pour la requête totale, ou effectuer un équivalent. Est-ce possible?

Répondre

2

Dans les versions précédentes de OrmLite vous devez utiliser SQL personnalisée:

var count = db.Scalar<long>(idQuery.Select("COUNT(DISTINCT Id)")); 

Je viens d'ajouter un soutien pour Sql.CountDistinct in this commit qui vous permettra d'utiliser une API dactylographié:

var count = db.Scalar<long>(idQuery.Select(x => Sql.CountDistinct(x.Id))); 

Ce changement est disponible à partir de v4.0.61 qui est maintenant available on MyGet.

+0

Cool! Merci mythe! – Martaver