2012-05-04 2 views
4

(я знаю, что это звучит как дубликат, но выслушай меня)Что такое PowerShell, эквивалентный выбору LINQ?

Учитывая следующий код, если Select-Object где эквивалентно LINQ-х Select, выход должен быть @("o", "n", "e")

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

Однако, так как выход это "o", это говорит мне, что Select-Object фактически действует так же, как LINQ's SelectMany, а не Select.

Так много вопроса: есть ли прямой эквивалент Select в PowerShell (то есть один, который бы не объединить коллекции в трубопроводе.)

+0

Не все здесь знакомы с Linq. Если бы вы могли опубликовать пример того, что у вас есть и что вам нужно, это значительно увеличит ваши шансы на правильный ответ –

+0

@ user978511 - Мое последнее предложение в значительной степени покрывает его (то есть, я ищу что-то, что не слилось две последовательности в одну последовательность). Тем не менее, ответ Романа охватывает его. –

ответ

8

Речь идет не о select, а о разворачивании массивов, полученных ToCharArray() и отправленных в конвейер. Чтобы получить ожидаемые результаты с использованием стандарта select, мы должны предотвратить разворот. Обычно это делается с помощью унарного оператора ,, который возвращает массив с одним элементом. В нашем случае эти элементы представляют собой массивы. Они не разворачиваются, их отправляют в трубопровод так, как они есть. Таким образом, select -first 1 выбирает первый элемент, который представляет собой массив с 3 элементами.

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

Это дает 3 частей: o, n, e.

+0

Отлично, только то, что я искал! –

+0

Хорошо помнить, что конвейер LINQ работает иначе, чем конвейер PowerShell. – JasonMArcher

0

Вы можете посмотреть объявление работы Josh Einstein

После загрузки модуля вы можете использовать аналогичный .net LINQ sintax в powershell

Смежные вопросы