0
我遇到使用LINQ一些性能问题,导致我对我的第一个计算器问题:的LINQ查询链执行顺序
的测试功能在下面的代码,执行的次数differente数这两个linqs查询:
int[] mydata = { 1, 2, 34, 5, 67, 8 };
var query = from i in mydata select new { i,v=test(i)};
var query2 = query.Where(v=>v.v == 2);
MessageBox.Show(query2.Count().ToString());
var query = from i in mydata where i==2 select new { i,v=test(i)};
MessageBox.Show(query.Count().ToString());
而且伯爵()函数,确确实实需要评估选择部分?这也意味着执行query2.Select(i => i)将激发测试()调用
如果这是要走的路,要执行类似调用的延迟过滤器,应将第二个查询更改为减少unnecesary测试()调用:
var query = from i in mydata where (filter ? v=filtevalue : true) select new { v=test(i)};
MessageBox.Show(query.Count().ToString());
我需要执行是建立一个大的查询中,然后过滤,在程序的不同部分的数据不执行的是filterout数据选择部分(以避免性能损失)。这可能吗?
在此先感谢。