限制数据查询并仅获取最后1000行。

5

我正在使用linq to 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);

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


http://codereview.stackexchange.com/questions/9773/optimizing-liststring-performance-in-c/9777#9777 - L.B
3个回答

6

尝试:

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

1

使用 ICriteria 尝试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接