【问题标题】:Limit data query and get only last 1000 rows限制数据查询,只获取最后 1000 行
【发布时间】:2012-05-22 13:37:16
【问题描述】:

我正在使用 linq 来休眠以从大表中查询数据。我正在尝试限制我的数据查询并仅获取最后 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);

非常感谢,抱歉我的英语不好

【问题讨论】:

标签: c# asp.net .net linq nhibernate


【解决方案1】:

试试:

query.OrderByDescending(criteria).Take(rowCount).OrderBy(criteria)

【讨论】:

    【解决方案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);
    

    【讨论】:

      【解决方案3】:

      使用 ICriteria 试试这个:

          criteria.SetMaxResults(1000);
          criteria.AddOrder(Order.Desc("ID"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-14
        相关资源
        最近更新 更多