2016-06-15 13 views
1

Ich schreibe eine ausgelagerte Abfrage in OrmLite von ServiceStack und wähle die Gesamtzahl der Datensätze und die IDs der Datensätze im Seitenbereich aus. Unter der Annahme, query einige willkürliche SqlExpression eine Reihe von Datensätzen auswählen:Wie kann ich in ServiceStack Ormlite COUNT (DISTINCT)?

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 erzeugt zwei Abfragen, eine für die IDs:

SELECT DISTINCT ... 

und eine für das Gesamt:

SELECT COUNT(*) 

I Ich versuche Ormlite zu generieren SELECT COUNT(DISTINCT Id) für die gesamte Abfrage, oder führen Sie ein Äquivalent. Ist das möglich?

Antwort

2

In früheren Versionen von OrmLite würden Sie Benutzerdefinierte SQL verwenden müssen:

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

ich nur Unterstützung für Sql.CountDistinct in this commit hinzugefügt habe, die Sie einen typisierten API verwenden lassen:

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

Diese Änderung ist verfügbar ab v4.0.61, das ist jetzt available on MyGet.

+0

Cool! Danke Mythos! – Martaver

Verwandte Themen