LINQ查询改进

时间:2012-02-25 05:06:04

标签: c# .net

过去两天我一直在墙上敲我的头,但我无法改善以下LINQ的时机。

from obj in list
from obj1 in list1
where (obj1.ClassesName.Contains(obj.ClassName) && obj1.Count> 0)
select new { result = obj1.ClassName})

我需要在 obj1.classesname 列表中搜索<​​b> obj.classname 。一旦在classesname列表中找到,我需要返回obj1类名。

我列表中有5千个对象。

上述查询运行时间超过30秒。我需要将这段时间减少到5秒以内。

我很困惑,每一个帮助都会计算在内。

提前致谢。

2 个答案:

答案 0 :(得分:1)

一个显而易见的改进是移出Count > 0的{​​{1}}条件,因此您根本不必考虑这些项目:

list1

由于from obj in list from obj1 in list1.Where(x=> x.Count >0) where (obj1.ClassesName.Contains(obj.ClassName)) select new { result = obj1.ClassName}) ClassesName,您也可以进行一些预处理以使用List<string>。这将使查找O(1)而不是O(n),其中n为list1中的项目数。

答案 1 :(得分:0)

(from obj1 in list1
where (obj1.Count > 0) && System.Linq.Enumerable.Any(from obj in list where obj1.ClassesName.Contains(obj.ClassName) select obj)
select new { result = obj1.ClassName});

这会在找到匹配时停止查看,这就是Any所做的,这会减少您查看的记录数量,但也许我不明白您要完成的任务。