为什么方法不能在LINQ Where方法中执行

Pri*_*cey 5 c# linq

在控制台应用程序中,从主类Program中的静态方法,我调用:

internal class Module
{
    public bool EnsureModuleLocalInstall()
    {
        if (CheckModuleUpToDateLocal())
            return true;
        else if (DownloadComponentData())
            if(InstallModuleLocal())
                return true;

        return false;
    }
}

var availableModules = new List<Module>();
... // Add several 'Modules' to list
var installed = availableModules.Where(m => m.EnsureModuleLocalInstall());
Run Code Online (Sandbox Code Playgroud)

我既设置了一个断点,又检查了预期的结果(本地安装的模块),但是从所有指示中都没有执行'EnsureModuleLocalInstall'方法.

我错过了一些明显的东西,或者我对LINQ'Fhere'方法的期望过高而且应该使用LINQ ForEach?

Sam*_*Sam 3

Where方法是使用延迟执行来实现的,因此在迭代结果之前查询不会真正运行。获取已安装模块列表的最简单方法是调用ToList查询返回值:

var installed = availableModules.Where(m => m.EnsureModuleLocalInstall()).ToList();
Run Code Online (Sandbox Code Playgroud)