2017-05-23 4 views
1

私は、System.Data.DataTable型のテーブルのメタデータを多次元配列に入れて、自分のプログラムで参照しやすいようにエレガントな方法を探しています。私はPowerShellの新機能です。これまでの私のアプローチは、不器用で退屈でした。 $ DataTableのは、私がこれまでに実行しようとしました何だった質問複数のプロパティの選択オブジェクト

内のDataTableていると仮定すると、

:痛々しい各配列を経由その後

$Types = $DataTable.Columns | Select-Object -Property DataType 
$Columns= $DataTable.Columns | Select-Object -Property ColumnName 
$Index = $DataTable.Columns | Select-Object -Property ordinal 
$AllowNull = $DataTable.Columns | Select-Object -Property AllowDbNull 

、個々のアイテムをピックアップし、私のマルチに入れ二次元配列$ TableMetaData。

Select-Objectのドキュメントを読みましたが、1回で1つのプロパティしか選択できないようです。上記のすべてをより上品に行い、情報を$ TableMetaDataに格納できるはずです。

複数のプロパティを簡単に選択し、1次元のスワップで多次元配列に配置する方法はありますか?

+0

を使用すると、多次元配列とはどういう意味ですか?ジグザグ配列、または実際の多次元配列? '$ TableMetaData'を作成するためのコードを表示してください –

+0

@mathia:$ TableMetaData [,,,]のようなものか$ TableMetaData [] [] [] []可能ですか? – user1205746

答えて

2

Select-Objectのドキュメントを読みましたが、1回で1つのプロパティしか選択できないようです。

これは、すべての4つの特性を有する、各列に1つのオブジェクトが含まれていますSelect-Object今すぐ-Propertyパラメータ

​​

$ColumnInfoを任意の数の引数を取ることができ、真実ではありません。

むしろ多次元配列を使用するよりも、あなたはハッシュテーブル(@{}、順不同辞書)を使用して検討する必要があります。ここでは

$ColumnInfo = $DataTable.Columns | ForEach-Object -Begin { $ht = @{} } -Process { 
    $ht[$_.ColumnName] = $_ 
} -End { return $ht } 

を、私たちは、空のハッシュテーブル$htは(-Beginブロックは一度だけ実行されます)を作成ColumnNameをキーにして各列オブジェクトを$htに格納し、最後に$htを返して$ColumnInfoに格納します。

今、あなたが名前の各列に関するメタデータを参照することができます。

$ColumnInfo.Column2 
# or 
$ColumnInfo["Column2"] 
+0

hmm ..私は同じことをしたと思って、エラーが発生しました。私は-expandpropertyを使用したに違いありません。 – user1205746

+0

@ user1205746 '-ExpandProperty'は引数として1つの文字列しか取らないので意味があります –

+0

多次元配列を何かの辞書に変換することは可能ですか?例:現在、columnName2にアクセスしたい場合は、$ ColumnInfo [1]を取得する必要があります。列にアクセスする場合は、$ ColumnInfo.ColumnName2だけを発行する必要があるように、出力をフレーム化する方法はありますか? – user1205746