3

请告知是否有一种标准方法可以更快地进行这样的查询

var res = qlist.Where(o => o.left >= x && o.right >= x).ToList()

qlist 对象可以包含多达一百万个元素,这样的查询可能非常慢。是否有 linq 或类似的索引?

谢谢

更新:抱歉无法在评论中回答。它是linq-to-objects,目的是缓存DB。

4

2 回答 2

3

除了告诉您为此使用数据库(如前所述)之外,您还可以通过两种方式提高性能:

  1. 使用 AsParallel:

    var res = qlist.AsParallel().Where(o => o.left >= x && o.right >= x).ToList();

  2. 您可以将项目插入到两个不同的排序列表中,一个是 by left,另一个是 by right。对于给定的 x,通过二分搜索找到等于(或几乎等于)它的项目,并从两个列表中获取该项目之后的所有项目。最终结果应该是从两个列表中选择的项目。不知道是不是更有效率。这取决于你做了多少插入以及你会找到多少项目。

于 2012-08-16T11:14:52.390 回答
3

尽管针对数据库执行的 LINQ2SQL 查询享有可能在数据库中定义的索引,但是在内存中执行的 LINQ 查询没有索引。

不幸的是,您需要自己动手:对列表进行排序,List.BinarySearch用于获取初始位置和最后位置,然后使用 LINQ 获取介于两者之间的所有条目。

于 2012-08-16T11:06:33.100 回答