Chilly YahYah Ответов: 2

System.data.dataview rowfilter на строке contains


При попытке работать с dataview его легко фильтровать по чему-то = чему-то. Но то, что я хочу сделать, - это отфильтровать что-то, содержащее эту строку.

У меня есть таблица данных с примерно 5000 элементами в ней. Где в PowerShell я могу фильтровать, используя что-то вроде следующего:

$filteredOnContainsString = $datatable.rows | ? {$_.Содержит(Строки)}

Это работает, но очень медленно.

Не мог бы кто-нибудь привести мне пример, где я могу фильтровать с помощью contains или чего-то подобного, чтобы получить те же результаты, что и выше?

Что я уже пробовал:

Связана эта:

$dataviewFilter = New-Object System.Data.dataview($datatable)
$dataviewFilter.RowFilter = "имя содержит Del"

Result = "Exception setting "RowFilter": "синтаксическая ошибка: отсутствует операнд после оператора 'Contains'."

2 Ответов

Рейтинг:
2

Chilly YahYah

На самом деле у меня нет разрешений на SQL-сервер, поэтому я не уверен, что это вообще возможно для меня, чтобы запустить "Invoke-SQLCMD". То, что я делаю,-это запрос сайта SharePoint с помощью метода invoke-restmethod в PowerShell, поскольку у меня есть только разрешения полного контроля на сайте, которым я управляю. Мне удалось заполнить таблицу данных.
Теперь моя цель - отфильтровать данные.
Принимая ваш ответ чисто на основе SQL, это заставило меня подумать, что объект datable может быть отфильтрован только на основе синтаксиса SQL.

Итак, где это работает для powershell: $filteredOnContainsString = $datatable.rows | ? {$_.Содержит(Строки)}

Эквивалентный SQL - запрос будет выглядеть примерно так:
Выберите [таблица] из [База данных]
где [столбец] типа '%string%'


Принимая это к моему Datatable фильтру, это действительно работает!!

$dataviewFilter = New-Object System.Data.dataview($datatable)
$dataviewFilter.RowFilter = "имя типа '%Del%'"


Итак, мораль этой истории-синтаксис. В этом случае синтаксис находится в формате SQL. Моя вина. Спасибо, что послали меня в правильном направлении!!!


Рейтинг:
17

Gerry Schmitz

"Вероятно" вся таблица загружается из-за расширения ".Contains".

Вам нужен сохраненный proc или pass-through SQL, чтобы запрос "выполнялся на сервере"

Цитата:
Итак, я уже упоминал ранее о Командлете Invoke-SQLCMD. Это, безусловно, самый простой способ получить данные в SQL Server и из него в PowerShell. Задайте строковую переменную для нужного запроса и используйте командлет. Если вы возвращаете результаты, назначьте вызов командлета переменной, и эти результаты будут возвращены в виде объекта PowerShell.


В PowerShell ADO.NET по-прежнему твой друг – Аллена Уайта в SQL Server производительность и автоматизация блог[^]


[no name]

Спасибо!