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)
Другие вопросы по тегам