3 c# linq performance loops take
我有一个List<String> myList.
我想把这个列表中的前10个项目与某些标准相匹配(.Contains("a")例如,让我们说).
我有:
Var results = myList.Where(o=>o.Contains("a")).Take(10);
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但LINQ执行了Where检索满足此条件的所有项目,然后只采取了前10个?或者这将以整个LINQ语句被考虑的方式编译(即它将执行Where但只到达到10项)?
LINQ使用延迟评估.当您执行以下行时:
var results = myList.Where(o=>o.Contains("a")).Take(10);
Run Code Online (Sandbox Code Playgroud)
什么都没发生.仅构建查询.当枚举results,(例如具有foreach或ToList()),则Where与Take将被应用到myList:Where将被执行,根据需要,直到高达10个true值被找到.