2008-09-22 36 views
8

的COUNT(*)我需要做尋呼NHibernate的查詢的用途如下:如何選擇一個NHibernate的子查詢的結果

Select count(*) from 
(Select e.ID,e.Name from Object as e where...) 

我曾嘗試以下,

select count(*) from Object e where e = (Select distinct e.ID,e.Name from ...) 

我得到一個nHibernate異常說我不能將Object轉換爲int32。

關於所需語法的任何想法?

編輯

子查詢使用不同的條款,我不能因爲Count(*)Count(*) distinct不是一個有效的語法替換e.ID,e.Name和distinct count(*)是沒有意義的。

+0

看來,我們需要看到的應用程序/ C#代碼調用返回後 – 2008-09-22 17:57:33

回答

0

您是否需要e.Id,e.Name?

只是做的對象,其中

SELECT COUNT(*)......

+0

對不起,我忘了補充規定,該子查詢是不同的。 – ForCripeSake 2008-09-22 17:42:33

1

下面是我如何做一個草稿:

查詢:

public IList GetOrders(int pageindex, int pagesize) 
{ 
    IList results = session.CreateMultiQuery() 
     .Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize)) 
     .Add(session.CreateQuery("select count(*) from Orders o")) 
     .List(); 
    return results; 
} 

ObjectDataSource控件:

[DataObjectMethod(DataObjectMethodType.Select)] 
public DataTable GetOrders(int startRowIndex, int maximumRows) 
{ 
    IList result = dao.GetOrders(startRowIndex, maximumRows); 
    _count = Convert.ToInt32(((IList)result[1])[0]); 

    return DataTableFromIList((IList)result[0]); //Basically creates a DataTable from the IList of Orders 
} 
+0

該問題源於這樣一個事實,即我需要第一個查詢的不同結果的Count(*),因爲查詢中的count(*)不會生成相同的數字(3個結果與54個結果由於多個聯接而產生)。 ) – ForCripeSake 2008-09-22 20:33:09

+0

啊,對。對不起,我錯過了 – 2008-09-23 01:26:01

2

通過修改吉爾 - 託雷的回答解決了我自己的問題.....

IList results = session.CreateMultiQuery() 
     .Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize)) 
     .Add(session.CreateQuery("select count(distinct e.Id) from Orders o where...")) 
     .List(); 
    return results; 
14
var session = GetSession(); 
var criteria = session.CreateCriteria(typeof(Order)) 
        .Add(Restrictions.Eq("Product", product)) 
        .SetProjection(Projections.CountDistinct("Price")); 
return (int) criteria.UniqueResult(); 
0

我喜歡,

public IList GetOrders(int pageindex, int pagesize, out int total) 
    { 
      var results = session.CreateQuery().Add(session.CreateQuery("from Orders o").SetFirstResult(pageindex).SetMaxResults(pagesize)); 

      var wCriteriaCount = (ICriteria)results.Clone()); 

      wCriteriaCount.SetProjection(Projections.RowCount()); 

      total = Convert.ToInt32(wCriteriaCount.UniqueResult()); 


      return results.List(); 
    } 
14

NHibernate的3.0允許Linq查詢。

試試這個

int count = session.QueryOver<Orders>().RowCount();