从 PowerShell 中的数据表中选择数据

问题描述 投票:0回答:1

我正在尝试弄清楚如何从数据表中获取我需要的数据。 我是数据表新手,无法通过阅读文档弄清楚如何正确构建所需的查询。

我在 PowerShell 中制作了一个测试脚本,并将其发布在下面:

# clear the screen:
CLS

# Create the Datatable:
$dt1 = New-Object System.Data.Datatable

# Name the datatable:
$dt1.TableName = "MyTable"

# Add columns to the table:
[void]$dt1.Columns.Add("datacolumnone")
[void]$dt1.Columns.Add("datacolumntwo")
[void]$dt1.Columns.Add("datacolumnthree")

# Add data:
[void]$dt1.Rows.Add([string]"id 1", [string]"fact 1", [string]"purple")
[void]$dt1.Rows.Add([string]"id 1", [string]"fact 2", [string]"black")
[void]$dt1.Rows.Add([string]"id 1", [string]"fact 3", [string]"green")
[void]$dt1.Rows.Add([string]"id 1", [string]"fact 4", [string]"green")
[void]$dt1.Rows.Add([string]"id 2", [string]"fact 1", [string]"blue")
[void]$dt1.Rows.Add([string]"id 2", [string]"fact 2", [string]"yellow")
[void]$dt1.Rows.Add([string]"id 2", [string]"fact 3", [string]"purple")
[void]$dt1.Rows.Add([string]"id 2", [string]"fact 4", [string]"yellow")
[void]$dt1.Rows.Add([string]"id 3", [string]"fact 1", [string]"purple")
[void]$dt1.Rows.Add([string]"id 3", [string]"fact 2", [string]"black")
[void]$dt1.Rows.Add([string]"id 3", [string]"fact 3", [string]"green")
[void]$dt1.Rows.Add([string]"id 3", [string]"fact 4", [string]"yellow")
[void]$dt1.Rows.Add([string]"id 4", [string]"fact 1", [string]"purple")
[void]$dt1.Rows.Add([string]"id 4", [string]"fact 2", [string]"yellow")
[void]$dt1.Rows.Add([string]"id 4", [string]"fact 3", [string]"purple")
[void]$dt1.Rows.Add([string]"id 4", [string]"fact 4", [string]"yellow")

# Write the data to a xml and data file:
$dt1.WriteXmlSchema('.\CacheSchema.xsd')
$dt1.WriteXml(".\CacheData.xml")

##############################
# End of this script         #
# Going on with the next one #
##############################

# Set the search criteria:
$column1 = ""
$column2 = "fact 1"
$column3 = "purple"

# build the query:
$qquery1 = "
        datacolumnone like '%"+$column1+"%' 
    AND datacolumntwo like '%"+$column2+"%'
    AND datacolumnthree like '%"+$column3+"%'
";

# Create the Datatable:
$dt2 = New-Object System.Data.Datatable

# Load the data:
[void]$dt2.ReadXmlSchema(".\CacheSchema.xsd")
[void]$dt2.ReadXml(".\CacheData.xml")

# Run the query:
$dt2.Select($qquery1)

现在我试图实现的是:

  1. 从具有以下值的行中查找所有 id (datacolumnone):“datacolumntwo”中的“fact 1”和“datacolumn Three”中的“purple”
  2. 然后进一步过滤上述查询结果中“datacolumnone”为“datacolumntwo”为“fact 4”的 id “数据列三”是“黄色”
  3. 然后,当我们获得过滤后的 id 时,显示“datacolumnone”中具有来自上面和中过滤查询的 id 的行 “datacolumntwo”值“事实 2”

https://msdn.microsoft.com/en-us/library/system.data.datatable.select%28v=vs.110%29.aspx

powershell datatable
1个回答
0
投票

如果我正确理解了这个问题,查询数据表与使用管道选择满足特定条件的行相同: 所以,查询一是:

$结果1 = $dt |其中对象 {$.datacolumntwo -eq "事实 1" - 和 $.datacolumn Three -eq "紫色"} |选择ID

查询2将是:

$结果2 = $dt | Where-Object {$.datacolumnone -in $result1 - 和 $.datacolumntwo -eq“事实 4”-和 $_.datacolumn Three -eq“黄色”} |选择ID

或者,如果不需要中间结果,您可以合并两个查询。

© www.soinside.com 2019 - 2024. All rights reserved.