我正在使用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);
非常感谢,抱歉我的英语不好
答案 0 :(得分:5)
尝试:
query.OrderByDescending(criteria).Take(rowCount).OrderBy(criteria)
答案 1 :(得分:2)
您可以使用此功能:
list.Skip(Math.Max(0, list.Count() - N)).Take(N);
示例:强>
此处创建一个包含9999个值的列表,并通过 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);
答案 2 :(得分:1)
使用ICriteria 试试这个:
criteria.SetMaxResults(1000);
criteria.AddOrder(Order.Desc("ID"));