5

linq を使用して nhibernate し、大きなテーブルからデータをクエリしています。データクエリを制限し、最後の 1000 行のみを取得してから、フィルタリング、並べ替え、およびページインを作成しようとしています。

.Take() を使用しようとすると、エラーが発生しました:

unable to locate HQL query plan in cache; generating (.Count[X4Data.Entity.IEventView](.OrderBy[X4Data.Entity.IEventView,System.DateTime](.Take[X4Data.Entity.IEventView](.Where[X4Data.Entity.IEventView](NHibernate.Linq.NhQueryable`1[X4Data.Entity.IEventView], Quote((x, ) => (Equal(x.DeviceId, p1))), ), p2, ), Quote((c5d4d87c-87ba-4e91-9652-bcdc87e3f0ba, ) => (c5d4d87c-87ba-4e91-9652-bcdc87e3f0ba.AtmTime)), ), ))

私のコード:

query = query.Take(rowCount);
query = query.ApplyFiltering(cmd, binder);
query = query.ApplySorting(cmd, binder);
binder.TotalCount = query.Count();
query = query.ApplyPaging(cmd);

どうもありがとう、私の悪い英語でごめんなさい

4

3 に答える 3

6

試す:

query.OrderByDescending(criteria).Take(rowCount).OrderBy(criteria)
于 2012-05-22T13:41:31.717 に答える
2

これを使用できます:

list.Skip(Math.Max(0, list.Count() - N)).Take(N);

例:

ここでは、9999 個の値を含む List が作成され、LINQを介して最後の 1000 個の値が選択されます。

 List<int> list = new List<int>();
        for (int i = 0; i < 9999; i++)
        {
            list.Add(i);
        }
        int take = 1000;
        var result = list.Skip(Math.Max(0, list.Count() - take)).Take(take);
于 2012-05-22T13:39:48.853 に答える
1

ICriteriaを使用してこれを試してください:

    criteria.SetMaxResults(1000);
    criteria.AddOrder(Order.Desc("ID"));
于 2012-05-22T14:20:45.230 に答える