LINQ查询的索引

时间:2012-08-16 11:01:43

标签: .net linq where indexing

请告知有没有一种标准方法可以更快地进行查询

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

qlist对象最多可包含数百万个元素,此类查询可能会非常慢。是否有linq的索引或类似的东西?

由于

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

除了告诉你使用数据库(已经写好),你可以通过两种方式提高性能:

  1. 使用AsParallel:

    var res = qlist.AsParallel()。其中​​(o => o.left> = x&& o.right> = x)。ToList();

  2. 您可以将商品插入两个不同的排序列表,一个按left,另一个按right。对于给定的x,使用二进制搜索找到与其等于(或几乎等于)的项目,并从该列表中获取该项目之后的所有项目。最终结果应该是从两个列表中选择的项目。我不知道它是否更有效率。这取决于您执行的插入数量以及您可以找到的项目数量。