2012-11-19 22 views
2

分組,我需要使用NHibernate得到這個查詢計數:NHibernate的查詢,選擇按行

Select RequestStatus.[Status], Count(ApprovalRequest.Id) 
    From ApprovalRequest Inner Join RequestStatus On ApprovalRequest.CurrentStatusId = RequestStatus.Id 
    Where RequestStatus.[Status] In ('Approved', 'Queried') And ApprovalRequest.Deleted != 1 
Group By RequestStatus.[Status] 

這裏有我的課:

public class ApprovalRequest 
    { 
     public ApprovalRequest() 
     { 
      Id = Guid.NewGuid(); 
      Statuses = new List<RequestStatus>(); 
     } 

     /// <summary> 
     /// Identity No. 
     /// </summary> 
     public Guid Id { get; set; } 


     /// <summary> 
     /// Represents the current status of the request e.g. Approved. 
     /// </summary> 
     public RequestStatus CurrentStatus { get; set; } 

     /// <summary> 
     /// The statuses that the request experiences. 
     /// </summary> 
     public IList<RequestStatus> Statuses { get; set; } 

    } 
} 


public class RequestStatus 
{ 
    public RequestStatus() 
    { 
     Id = Guid.NewGuid(); 
    } 

    public Guid Id { get; set; } 

    public StatusEnum Status { get; set; } 
} 

我嘗試此查詢:

var lst = uow.Session.QueryOver<ApprovalRequest>() 
       .JoinQueryOver<RequestStatus>(req => req.CurrentStatus) 
       .SelectList(list => 
        list 
        .SelectCount(p => p.Id) 
        .SelectGroup(p => p.CurrentStatus.Status) 
        ).List(); 

但我得到一個錯誤:

無法解析屬性:CurrentStatus.Status:ApprovalRequest(NHibernate)

回答

5

您需要將連接的表綁定到別名。

ApprovalRequest approvalRequestAlias = null; 
RequestStatus requestStatusAlias = null; 

var lst = uow.Session.QueryOver<ApprovalRequest>(() => approvalRequestAlias) 
    .JoinAlias(() => approvalRequestAlias.CurrentStatus,() => requestStatusAlias) 
    .SelectList(list => list 
     .SelectCount(p => p.Id) 
     .SelectGroup(p => requestStatusAlias.Status) 
    ).List(); 
+0

非常感謝,但它給了我下面的錯誤:無法執行查找[SQL:SQL不可] –

+0

哎呀,它的工作,我改變了的.List()後列出 ....謝謝你很多Mike。你拯救了我的一天。 –

+0

有沒有簡單的方法將結果轉換爲Dictionary ? –