用linq语句替换foreach

时间:2014-07-12 02:02:52

标签: c# linq

我正在尝试将此代码转换为linq:

foreach (var printer in printers)
{
    if (printer.Installed)
        installedPrinters.Add(printer);
}

我是Linq的新手,并希望在迭代一个集合时指出它是如何工作的。

5 个答案:

答案 0 :(得分:3)

printers.Where(printer => printer.Installed)
  .ToList()
  .ForEach(printer => installedPrinters.Add(printer));

注意需要在ForEach之前调用ToList()(参见Lambda Expression using Foreach Clause)。

另请注意,虽然这样可行,但您的原始代码可能更容易阅读...... LINQ很酷但不觉得有必要将其用于所有内容:)

答案 1 :(得分:3)

如果您只是想创建一个新列表,您可以随时执行:

var installedPrinters = printers.Where(p => p.Installed).ToList();

如果要添加可能已包含项目的列表,则可以尝试:

installedPrinters.AddRange(printers.Where(p => p.Installed));

假设您的installedPrinters实际上是一个支持AddRange的集合,例如List。

答案 2 :(得分:1)

首先使用Where过滤Installed == true,然后使用ForEach运行它们:

printers.Where(p => p.Installed).ForEach(p => installedPrinters.Add(p));

答案 3 :(得分:0)

foreach (var printer in printers.Where (p => p.Installed) { installedPrinters.Add(printer); }

答案 4 :(得分:0)

试试这个

printer.Where(x => x.Installed).ToList()
      .ForEach(
          p=>
            {
              installedPrinters.Add(p)
            }
);