FindAll与哪里

Tho*_*ann 7 .net c# linq ienumerable list

我有一个IEnumerable<T>我想根据LINQ谓词进行过滤.我试着用WhereIEnumerable,因为我通常做,但是这一次我偶然发现了一些有趣的事情.当IEnumerable使用谓词调用Where on时,我得到一个空列表作为回报.我知道它必须生成一个包含两个项目的列表.如果我改为使用FindAll相同的谓词,那么它会产生正确的结果.

任何人都可以向我解释,为什么会发生这种情况?我一直认为那Where是一种懒惰的版本FindAll,它也返回了一个IEnumerable而不是一个List.它必须有更多吗?(我做了一些研究,但无济于事.)

码:

IEnumerable<View> views = currentProject.Views.Where(
                    v => v.Entries.Any(e => e.Type == InputType.IMAGE || e.Type == InputType.VIDEO));

IEnumerable<View> views = currentProject.Views.FindAll(
                    v => v.Entries.Any(e => e.Type == InputType.IMAGE || e.Type == InputType.VIDEO));
Run Code Online (Sandbox Code Playgroud)

dlg*_*ght 4

您可以在这里找到答案:LINQ、Where() 与 FindAll()。基本上,如果您在“Where”上调用 .ToList(),它们将是相同的。

您可以找到有关延迟执行和立即执行之间差异的更多信息:https://code.msdn.microsoft.com/LINQ-Query-Execution-ce0d3b95