0

条件付きの行数を選択する必要があります:

フルカウントを収集するためのクエリ:

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
4

1 に答える 1

0

同じクエリで合計数が必要ない場合は、SelectListの前に制限を追加するだけです。

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)
于 2012-09-17T16:09:28.023 に答える