我在SO上经历了几个帖子,但找不到解决方案(针对此具体)。
我有一些复杂的Linq查询,它返回少量数千行。我正在使用IEnumerable
作为结果。但后来,我需要遍历每一行,执行一些操作。为此,我通过调用ToList()
来转换它。但是这(我相信)正在扼杀性能,并且超时。有关优化的建议/指导吗?如果我遗失了什么,你可以纠正我。 (我是性能问题的新手)
这是我的代码:
IEnumerable<someModel> results = null;
results = from x in tableX ..... select xyz;
//some complex query, returning few thousands of rows.
//now converting to list:
List<someModel> MYresults = results.ToList();
number_of_records = MYresults.Distinct(new myComparer()).Count();
//row operation that I need to perform:
if(condition)
{
foreach(someModel m in MYresults)
{
m.property = m.property + someOperations();
}
}
if(somecondition)
{
return MYresults.Distinct(new someComparer()).ToList();
}
else
return MYresults.Distinct(new someComparer()).Skip(x).Take(y).ToList();
答案 0 :(得分:2)
results
变量不包含数千行......只是一个查询。
results = from x in tableX ..... select xyz; // just a query, no data yet
在致电ToList()
之前,您实际上并没有检索任何记录。缓慢可能是查询的复杂性,或记录的数量......或两者兼而有之。
List<someModel> MYresults = results.ToList(); // get data
由于您正在对数据执行Distinct()
以删除某些记录,因此我要考虑将以下行合并到您原来的LINQ语句中,因此您不要甚至首先将这些记录拉过来。 (如果someComparer
中的代码无法转换为有效的SQL,则可能无法正常工作。)
results = from x in tableX ..... select xyz;
return results.Distinct(new someComparer()).ToList();