了解LINQ的Where/Take的基本原理

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项)?

Tim*_* S. 8

LINQ使用延迟评估.当您执行以下行时:

var results = myList.Where(o=>o.Contains("a")).Take(10);
Run Code Online (Sandbox Code Playgroud)

什么都没发生.仅构建查询.当枚举results,(例如具有foreachToList()),则WhereTake将被应用到myList:Where将被执行,根据需要,直到高达10个true值被找到.