9

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 ...)

そして、オブジェクトを int32 に変換できないという nHibernate 例外が発生します。

必要な構文に関するアイデアはありますか?

編集

サブクエリは明確な句を使用します。有効な構文ではなく、意味がないCount(*)ため、e.ID、e.Name を置き換えることはできません。Count(*) distinctdistinct count(*)

4

6 に答える 6

18

NHibernate 3.0 では、Linq クエリが可能です。

これを試して

int count = session.QueryOver<Orders>().RowCount();
于 2011-01-20T19:06:53.260 に答える
16
var session = GetSession();
var criteria = session.CreateCriteria(typeof(Order))
                    .Add(Restrictions.Eq("Product", product))
                    .SetProjection(Projections.CountDistinct("Price"));
return (int) criteria.UniqueResult();
于 2008-09-23T00:29:14.593 に答える
2

Geir-Toreの答えを修正することで私自身の質問を解決しました.....

 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;
于 2008-09-22T21:58:03.193 に答える
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;
}

オブジェクトデータソース:

[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
}
于 2008-09-22T20:19:23.150 に答える
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();
    }
于 2010-07-19T18:44:51.300 に答える
0

が必要なe.Id場合e.Name:

select count(*) from Object where.....

于 2008-09-22T17:34:25.403 に答える