使用SQL查询结果中的主键创建哈希表的哈希表作为哈希表键值
问题描述:
我有一个查询的结果集大小适中,我想将它们转换为哈希表的哈希表,每个子哈希表包含结果中的一行设置,并使用每行中的唯一标识作为包含该行的散列表的关键字。到目前为止,我已经试过这样:使用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将数据表转换为哈希表,但我看到的一切似乎只适用于简单的哈希表,而不是我需要的哈希表结果中的哈希表。
答
如果您希望数据行作为散列表的散列表,则需要将每个数据行转换为散列表。枚举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)
}