我试图找到一种优雅的方法将System.Data.DataTable类型的表的元数据放入一个多维数组中,以便在我的程序中轻松引用。我是powershell的新手,到目前为止我对这个问题的态度是笨拙乏味的。
假设$ DataTable是有问题的DataTable
到目前为止我尝试做的是:
$Types = $DataTable.Columns | Select-Object -Property DataType
$Columns= $DataTable.Columns | Select-Object -Property ColumnName
$Index = $DataTable.Columns | Select-Object -Property ordinal
$AllowNull = $DataTable.Columns | Select-Object -Property AllowDbNull
然后痛苦地遍历每个数组,拾取单个项目并将它们放入我的多维数组$ TableMetaData。
我阅读了Select-Object的文档,在我看来,一次只能选择1个属性?我想我应该能够更优雅地完成上述所有工作并将信息存储在$ TableMetaData中。
有没有办法轻松获取多个属性并将它们一次性放入多维数组?
答案 0 :(得分:4)
我阅读了Select-Object的文档,在我看来,一次只能选择1个属性?
事实并非如此,Select-Object
可以为-Property
参数提取任意数量的参数
$ColumnInfo = $DataTable.Columns | Select-Object -Property DataType,ColumnName,ordinal,AllowDbNull
现在$ColumnInfo
将为每列包含一个对象,具有所有4个属性。
您应该考虑使用散列表(@{}
,一个无序字典),而不是使用多维数组:
$ColumnInfo = $DataTable.Columns | ForEach-Object -Begin { $ht = @{} } -Process {
$ht[$_.ColumnName] = $_
} -End { return $ht }
在这里,我们创建一个空的哈希表$ht
(-Begin
块只运行一次),然后使用$ht
作为键将每个列对象存储在ColumnName
中,最后返回$ht
,将其存储在$ColumnInfo
。
现在,您可以按名称引用每列的元数据:
$ColumnInfo.Column2
# or
$ColumnInfo["Column2"]