我試圖從一個查詢中得到一個計數,只是無法弄清楚如何將我想要的SQL轉換成NHibernate的QueryOver語法。NHibernate QueryOver:通過在子查詢中得到一個行數
這是SQL:
select count(*) from
(select Email from Entry
where (conditions...)
group by Email) as tmp
看起來很簡單吧?
這是我正在努力做到這一點,但行數()調用似乎被完全消失,優化組:
var query = _unitOfWork.CurrentSession.QueryOver<ContestEntry>()
.Select(Projections.Property<ContestEntry>(x => x.Email),
Projections.Group<ContestEntry>(x => x.Email));
return query.RowCount();
我不介意使用這一標準,但我對於新的(對我來說)QueryOver API讓我擺脫魔法字符串感到興奮。
更新:
我無法使用生成的SQL,做了數(如SELECT COUNT(不同的電子郵件)),因爲該應用程序對SQL CE運行中的不同的查詢。
參見:http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/80a1d7dd-22be-4583-b8f2-fcd8cde5ec53/和http://our.umbraco.org/wiki/install-and-setup/sql-server-ce-4-known-issues(「不同之處在計數不支持」,講述的下跌的一頁的方式2/3)
感謝亞歷克斯,你是正確的 - 這在SQL Server(大概是其他數據庫)中正常工作。然而,這個東西運行的應用程序在某些情況下也使用SQL CE,無論出於何種原因,SQL CE不支持select count(distinct x)。請參閱http://social.msdn.microsoft.com/Forums/en-US/sqlce/thread/80a1d7dd-22be-4583-b8f2-fcd8cde5ec53/和http://our.umbraco.org/wiki/install-and- setup/sql-server-ce-4-known-issues – mmacaulay 2011-04-25 13:07:11
我將此標記爲正確答案,因爲從技術上講,只要您使用SQL Server。對於SQL CE,我必須使用內聯SQL來使其工作。 – mmacaulay 2011-05-25 14:24:08