Nhibernate QueryOver - .SelectCount() с предикатом
Мне нужно выбрать количество строк с условием:
Запрос, чтобы собрать полный счет:
var searchs = searchQuery.SelectList
(list => list
.SelectGroup(order => order.Id).WithAlias(() => groupResult.GlobalId)
.SelectCount(() => _transaction.ReturnStatus).WithAlias(() => groupResult.DeclineCount)
)
Мне нужно количество транзакций, равное 201. Примерно так:
.SelectCount(() => _transaction.ReturnStatus == 201).WithAlias(() => groupResult.DeclineCount) //runtime error
Заранее спасибо!
PS: оригинальный SQL-запрос:
SELECT TOP 100
globalOrd.ID AS GlobalId ,
SUM(CASE WHEN transact.returnStatus = 201 THEN 1
ELSE 0
END) AS DeclineCount
FROM Orders.Global globalOrd
INNER JOIN Orders.TransactionDetail transactDet ON globalOrd.ID = transactDet.DetailID
INNER JOIN Orders.[Transaction] transact ON transactDet.TransactionID = transact.ID
GROUP BY globalOrd.ID
1 ответ
Если вам не нужно общее количество в том же запросе, вы можете просто добавить ограничение перед списком выбора:
var searchs = searchQuery.SelectList
(list => list
.Where(() => _transaction.ReturnStatus == 201)
.SelectGroup(order => order.Id).WithAlias(() => groupResult.GlobalId)
.SelectCount(() => _transaction.ReturnStatus).WithAlias(() => groupResult.DeclineCount)
)
Однако, если вы хотите и общее, и ограниченное количество, вам придется использовать SqlProjection для последнего, выполняющего что-то вроде:
SUM(CASE {alias}.ReturnStatus WHEN 201 THEN 1 ELSE 0 END)