(我知道这听起来像是重复的,但请听我说)
鉴于以下代码,如果Select-Object
等同于LINQ的Select
,则输出应为@("o", "n", "e")
"one", "two" | %{$_.GetCharArray()} | select -first 1
但是,由于输出为"o"
,这告诉我Select-Object
实际上与LINQ SelectMany
的行为相同,而不是Select
。
很多问题是:在PowerShell中是否有直接等同于Select
(即不会合并管道中的集合的那个)
答案 0 :(得分:8)
这不是关于select
,而是关于展开ToCharArray()
获取并发送到管道的数组。为了使用标准select
获得预期结果,我们应该阻止展开。这通常通过使用一元运算符,
来完成,该运算符返回具有单个项的数组。在我们的例子中,这些项目是数组。它们没有展开,它们按原样发送到管道。因此,select -first 1
选择第一个项目,该项目是包含3个项目的数组。
"one", "two" | %{, $_.ToCharArray()} | select -first 1
这给出了3个项目:o,n,e。
答案 1 :(得分:0)
您可以查看Josh Einstein
的作品加载模块后,您可以在powershell中使用类似的.net LINQ sintax