2016-11-07 173 views
0

我有一個查詢的結果集大小適中,我想將它們轉換爲哈希表的哈希表,每個子哈希表包含結果中的一行設置,並使用每行中的唯一標識作爲包含該行的散列表的關鍵字。到目前爲止,我已經試過這樣:使用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) 
}