【问题标题】:Selected columns from DataTable从 DataTable 中选择的列
【发布时间】:2011-11-25 14:43:09
【问题描述】:

如何从 DataTable 中获取 Selected 列?
例如,我的 BaseTable 有三列,
ColumnA、
ColumnB 和
ColumnC。

现在,作为中间操作的一部分,我只需要从 ColumnA 中检索所有行。有没有像 DataTable.Select 一样的预定义公式?

【问题讨论】:

  • 只拉一列的目的是什么?如果您将所有三列都保留在那里,则在循环数据时,您始终可以只使用带有DataTable.Rows[i]["ColumnA"] 的第一列。
  • 我需要将 Column-A 的不同行值设置为 listBox。
  • 我可以创建一个 DataView 并从那里消除不必要的列。但是如果数据表大小很大,它是一个两步过程并且会窒息。
  • DataView dv = dt.DefaultView; DataTable dtColA = dv.ToTable(true, new string[] { "Column-A" });
  • 您使用的是什么 .NET 框架? LINQ 适合您吗?

标签: c# .net datatable


【解决方案1】:

从这个问题:How to select distinct rows in a datatable and store into an array 你可以得到不同的值:

DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "ColumnA");

如果您正在处理大型 DataTable 并关心性能,我建议在 .NET 2.0 中使用类似以下的内容。我假设您显示的数据类型是字符串,因此请根据需要进行更改。

Dictionary<string,string> colA = new Dictionary<string,string>();
foreach (DataRow row in table.Rows) {
    colA[(string)row["ColumnA"]] = "";
}
return colA.Keys;

【讨论】:

  • 最小行数约为 50K,这应该对所有 26 列实施。所以 foreach、for 和 while 循环是没有问题的。
  • 无论如何,上述解决方案对我有用。我相信您的解决方案非常适合小型数据对象。
【解决方案2】:

DataView.ToTable Method.

DataView view = new DataView(MyDataTable);
DataTable distinctValues = view.ToTable(true, "ColumnA");

现在你可以选择了。

DataRow[] myRows = distinctValues.Select();

【讨论】:

  • 我使用了我已经在 cmets 中发布的类似的。这对我来说可以。只是寻找不影响性能的任何其他更好的解决方案。无论如何,我现在对此表示满意。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2017-07-28
相关资源
最近更新 更多