4

(我知道这听起来像是重复的,但请听我说)

给定以下代码,如果Select-Object等效于 LINQ's Select,则输出应为@("o", "n", "e")

"one", "two" | %{$_.GetCharArray()} | select -first 1

但是,由于输出是"o",这告诉我Select-Object实际上与 LINQ 的行为相同,SelectMany而不是Select.

很多问题是:在 PowerShell 中是否有直接等价物Select(即不会合并管道中的集合)

4

2 回答 2

9

这不是关于展开由管道获得并发送到管道的select数组,而是关于展开数组。ToCharArray()为了使用标准获得预期的结果,select我们应该防止展开。这通常是通过使用一元运算符来完成的,该运算符,返回一个包含单个项目的数组。在我们的例子中,这些项目本身就是数组。它们没有展开,它们按原样发送到管道。因此,select -first 1选择第一个项目,它是一个包含 3 个项目的数组。

"one", "two" | %{, $_.ToCharArray()} | select -first 1

这给出了 3 个项目:o、n、e。

于 2012-05-04T11:34:58.877 回答
0

你可以看看乔什爱因斯坦的作品

加载模块后,您可以在 powershell 中使用类似的 .net LINQ sintax

于 2012-05-04T11:10:04.850 回答