Может получить значение свойства ExpandProperty, но не прямым доступом - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть объект System.Data.DataSet, который был сериализован и затем десериализован в объект PSObject.

Я пытаюсь получить доступ к свойству, которое было заполнено из столбца в таблице с именем Properties.

Хотя Get-Member показывает, что у объекта есть свойство с именем Properties, и я могу использовать select -ExpandProperties для получения значения, я не могу получить к нему доступ напрямую как к свойству объекта.

Обновление : фактический запрос SQL выполняется на сервере, а результаты сериализуются с использованием Export-CliXml и помещаются в доступный общий ресурс.Результаты повторно гидратируются с использованием Import-CliXml, что приводит к типу объекта с префиксом Deserialized, как отмечено Мётцем ниже.Объяснение этому можно найти здесь .

$> $res.Tables[0] | Get-Member

TypeName: Deserialized.System.Data.DataRow

Name       MemberType Definition
----       ---------- ----------
GetType    Method     type GetType()
ToString   Method     string ToString(), string ToString(string format, System.IFormatProvider formatProvider), string IFormattable.ToString(string format, System.IFormatProvider formatProvider)
Properties Property   System.String {get;set;}

$> $res.Tables[0].Properties
$> $res.Tables[0]."Properties"
$> $res.Tables[0] | select -ExpandProperty "Properties"
<object type= .... > .... </object>

1 Ответ

0 голосов
/ 28 сентября 2018

Нам нужно немного больше, чтобы помочь вам.Мы не знаем, как выглядит ваш источник данных, структура таблицы и другие важные детали.

Я только что сделал небольшую выборку по одной из своих баз данных, и все выглядит немного иначе.

$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "data source=.;Initial catalog=db;Trusted_Connection=True;"

$SqlCommand = $SqlConnection.CreateCommand()
$SqlCommand.CommandText = "SELECT * FROM dbo.Table"
$DataAdapter = new-object System.Data.SqlClient.SqlDataAdapter $SqlCommand

$dataset = new-object System.Data.Dataset
$DataAdapter.Fill($dataset)

Ваш тип говорит: "Deserialized.System.Data.DataRow", а мой - "System.Data.DataRow".

PS C:\windows\system32> $dataset.Tables[0] | Get-Member


   TypeName: System.Data.DataRow

Name                      MemberType            Definition
----                      ----------            ----------
AcceptChanges             Method                void AcceptChanges()
BeginEdit                 Method                void BeginEdit()
CancelEdit                Method                void CancelEdit()
ClearErrors               Method                void ClearErrors()
Delete                    Method                void Delete()
EndEdit                   Method                void EndEdit()
Equals                    Method                bool Equals(System.Object obj)
GetChildRows              Method                System.Data.DataRow[] GetChildRows(string relationName), System.Data...
GetColumnError            Method                string GetColumnError(int columnIndex), string GetColumnError(string...
GetColumnsInError         Method                System.Data.DataColumn[] GetColumnsInError()
GetHashCode               Method                int GetHashCode()
GetParentRow              Method                System.Data.DataRow GetParentRow(string relationName), System.Data.D...
GetParentRows             Method                System.Data.DataRow[] GetParentRows(string relationName), System.Dat...
GetType                   Method                type GetType()
HasVersion                Method                bool HasVersion(System.Data.DataRowVersion version)
IsNull                    Method                bool IsNull(int columnIndex), bool IsNull(string columnName), bool I...
RejectChanges             Method                void RejectChanges()
SetAdded                  Method                void SetAdded()
SetColumnError            Method                void SetColumnError(int columnIndex, string error), void SetColumnEr...
SetModified               Method                void SetModified()
SetParentRow              Method                void SetParentRow(System.Data.DataRow parentRow), void SetParentRow(...
ToString                  Method                string ToString()
Item                      ParameterizedProperty System.Object Item(int columnIndex) {get;set;}, System.Object Item(s...
ACCOUNTTYPE               Property              int ACCOUNTTYPE {get;set;}
AUTOINFO                  Property              int AUTOINFO {get;set;}
AUTOLOGOFF                Property              int AUTOLOGOFF {get;set;}
AUTOUPDATE                Property              int AUTOUPDATE {get;set;}
CLIENTACCESSLOGLEVEL      Property              int CLIENTACCESSLOGLEVEL {get;set;}
COMPANY                   Property              string COMPANY {get;set;}
COMPILERWARNINGLEVEL      Property              int COMPILERWARNINGLEVEL {get;set;}
CONFIRMDELETE             Property              int CONFIRMDELETE {get;set;}
CONFIRMUPDATE             Property              int CONFIRMUPDATE {get;set;}
CREDENTIALRECID           Property              long CREDENTIALRECID {get;set;}
DEBUGGERPOPUP             Property              int DEBUGGERPOPUP {get;set;}
...                       ...                   ...

Таким образом, список доступных мне методов превышает ваш список.Это первое.Следующим является то, что все мои свойства сопоставлены со столбцом в моей таблице.

Так что я бы предположил, что вам нужно поделиться еще немного кода о том, как вы заполняете данные в вашем объекте набора данных, чтобы мы могли понять, что высталкиваемся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...