C# 在不知道列名或类型的情况下,将DataTable转换为适合powershell的输出
我有一个api调用,它在C中返回一个DataSet对象。我所要做的就是从我正在开发的cmdlet返回此数据到powershell,以便在管道上使用,但我真的不想手动执行此操作,因为底层api可以动态更改 DataSet/DataTable等的所有示例都使用linq,但它们总是指定列名——我在设计时没有这样的特权 我真的不知道最好的方法是什么,因为我不是一个c开发人员,所以我真的不知道该搜索什么术语,所以我可以返回WriteObjectds.Tables[0]的指针;以一种可以在powershell中使用而不必操作数据表的方式,我们将不胜感激 谢谢 大卫 编辑: 无法将我的评论正确发布 所以我是这样做的:C# 在不知道列名或类型的情况下,将DataTable转换为适合powershell的输出,c#,linq,powershell,datatable,C#,Linq,Powershell,Datatable,我有一个api调用,它在C中返回一个DataSet对象。我所要做的就是从我正在开发的cmdlet返回此数据到powershell,以便在管道上使用,但我真的不想手动执行此操作,因为底层api可以动态更改 DataSet/DataTable等的所有示例都使用linq,但它们总是指定列名——我在设计时没有这样的特权 我真的不知道最好的方法是什么,因为我不是一个c开发人员,所以我真的不知道该搜索什么术语,所以我可以返回WriteObjectds.Tables[0]的指针;以一种可以在powershel
PSObject ps = new PSObject();
foreach (DataRow dtRow in ds.Tables[0].Rows)
{
foreach (DataColumn dc in ds.Tables[0].Columns)
{
ps.Members.Add(new PSNoteProperty(dc.ColumnName, dtRow[dc].ToString()));
}
}
WriteObject(ps);
对于datatable列,您始终可以使用索引[?]而不是名称。您还可以从dt.columns中的columns属性foreach DataColumn dc提取名称。然后是dc.ColumnName。对于linq,字符串[]name=dt.Columns.Cast.Selectx=>x.ColumnName.ToArray;不确定这是否是最好的方式,但我已经按照我第一篇文章的编辑让它工作了,因为我无法正确格式化这篇评论。