2016-11-07 9 views
0

私はクエリから適切なサイズの結果セットを持っている、私はハッシュテーブルのハッシュテーブルに変換したい、それぞれのサブハッシュテーブルは、その行を含むハッシュテーブルのキーとして各行の一意のIDを設定して使用します。これまでのところ私はこの試みている:ハッシュテーブルキーのSQLクエリ結果からプライマリキーを使用してハッシュテーブルのハッシュテーブルを作成

$query = "SELECT * FROM [TaskCentre_Staging].[dbo].[vw_IT_PriceList]" 

$command = $connection.CreateCommand() 
$command.CommandText = $query 

$result = $command.ExecuteReader() 

$table = New-Object "System.Data.DataTable" 
$table.Load($result) 

$hashtable = @{} 

foreach($line in $table) 
{ 
    $hashtable.Add($line.U_ProductID, $line) 
} 

$hashtable 

をしかし、これは次のようになり:

1 System.Data.DataRow 
2 System.Data.DataRow 
3 System.Data.DataRow 
4 System.Data.DataRow 
5 System.Data.DataRow 
...

どのように私はこれが機能するのですか?私はデータテーブルをハッシュテーブルに変換するためにhpwを探してみましたが、私が見たことのあるものはすべて、単純なハッシュテーブルでのみ動作するように見えますが、必要なハッシュテーブル結果内のハッシュテーブルではありません。

答えて

0

ハッシュテーブルのハッシュテーブルとしてデータ行を使用する場合は、各データ行をハッシュテーブルに変換する必要があります。 System.Data.DataRowオブジェクトのプロパティを列挙し、含まれたくないすべての(共通の)プロパティを削除し、残りのプロパティを新しいハッシュテーブルに入れてから、ハッシュテーブルを$hashtableに追加します。

$hashtable = @{} 
foreach ($line in $table) { 
    $row = @{} 
    $line.PSObject.Properties | Where-object { 
    'RowError','RowState','Table','ItemArray','HasErrors' -notcontains $_.Name 
    } | ForEach-Object { 
    $row[$_.Name] = $_.Value 
    } 
    $hashtable.Add($row.U_ProductID, $row) 
} 
関連する問題