使用SQL查询结果中的主键创建哈希表的哈希表作为哈希表键

时间:2016-11-07 11:18:37

标签: sql powershell datatable hashtable

我有一个来自查询的大小合适的结果集,我想将它们转换为哈希表的哈希表,每个子哈希表包含结果集中的一行,并使用每行中的唯一ID作为键。包含该行的哈希表。到目前为止,我已经尝试过这个:

$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将数据表转换为哈希表,但我看到的一切似乎只适用于一个简单的哈希表,而不是我需要的哈希表结果中的哈希表。

1 个答案:

答案 0 :(得分:2)

如果您希望将数据行作为哈希表的哈希表,则需要将每个数据行转换为哈希表。枚举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)
}