【问题标题】:Creating hashtable of hashtables using primary key from SQL query result as hashtable key使用 SQL 查询结果中的主键作为哈希表键创建哈希表的哈希表
【发布时间】:2016-11-07 11:18:37
【问题描述】:

我有一个大小合适的查询结果集,我想将它们转换为哈希表的哈希表,每个子哈希表包含结果集中的一行,并使用每行的唯一 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 系统.数据.数据行
5 System.Data.DataRow
...

如何让它工作?我尝试寻找 hpw 将数据表转换为哈希表,但我所看到的一切似乎只适用于简单的哈希表,而不适用于我需要的哈希表结果中的哈希表。

【问题讨论】:

    标签: sql powershell datatable hashtable


    【解决方案1】:

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

    【讨论】:

    • 我认为 $row.U_ProductID - 是一个自定义值,如果是 DataTable,它的工作方式如下:$hashtable.Add($line.ItemArray[0], $line.ItemArray[1] )
    • @SergiyDivnych 你在说什么? $table 是 DataTable,$line 是该表中的 DataRows,$row 是一个哈希表,其中填充了来自 $line(包括 U_ProductID)的值,然后将其添加到另一个哈希表 $hashtable
    • 它对我有用,我得到的 DataTable 的最后一行代码是 '$hashtable.Add($line.ItemArray[0], $line.ItemArray[1])'使用查询从数据库中获取,但是使用此值会使“U_ProductID”崩溃,因此,如果它对您使用此“U_ProductID”,好吧,也许对某人来说它会起作用,正如我所写的那样,我认为这个“U_ProductID”是您的自定义值。所以无论如何,谢谢你的代码,它帮助了我
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 2016-11-30
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多