【问题标题】:Returning rows from a specific column name from a DataTable - C#从 DataTable 中返回特定列名的行 - C#
【发布时间】:2012-05-08 15:32:24
【问题描述】:

我一直试图在网上找到答案,但我正在使用 DataTable,我想根据表中的列名过滤所有行,但我似乎无法让 filterExpression 工作。即使语法错误,这基本上是我想要它做的......

DataRow[] row = sqlDT.Select(ColumnName = "Foo", "ASC", DataViewRowState.CurrentRows);

非常感谢。

【问题讨论】:

  • 你目前有什么代码?它给出了什么错误或问题?只是说这种语法是错误的,但大致就是它所做的对我们完全没有帮助:S
  • 我真的没有太多代码,更多的是“你将如何去做这个”的问题。我有一个 DataTable,我想过滤来自特定列的值(我将其名称传递给方法),然后从列中返回这些值的对象。我正在检查 DataTable 类的 Select() 方法,并且想知道是否/如何比较列名并仅返回该列的行......类似于 SELECT * FROM "ColumnName" 的 SQL 语句。

标签: c# asp.net visual-studio-2010 c#-4.0


【解决方案1】:

有几种方法可以做到这一点。我建议使用 LINQ 过滤行:

sqlDT = sqlDT.AsEnumerable().Where(r => r.Field<string>("ColumnName") == "Foo").CopyToDataTable();

您也可以使用Select 方法或DefaultView.RowFilter 属性:

//select method
sqlDT = sqlDT.Select("ColumnName = 'Foo'").CopyToDataTable();

//row filter property
sqlDT.DefaultView.RowFilter = "ColumnName = 'Foo'";
sqlDT = sqlDT.DefaultView.ToTable();

编辑

如果您只想过滤掉不需要的列,请使用DefaultView.ToTable() 方法:

sqlDT = sqlDT.DefaultView.ToTable(false, "Column1", "Column2", "Column3");

【讨论】:

  • 感谢您的回复...它是否将“ColumnName”识别为属性?还是您指的是我表中列的名称?
  • 不,我指的是表中列的名称。将ColumnName 替换为您要过滤的任何列。
  • 所以我想按列过滤,所以我不确定这是否正确?...类似于仅从我的 DataTable 中选择“ColumnName”FROM“TableName”的 SQL 语句。
  • 以上所有示例都是按列过滤的。断开连接在哪里,因为我试图靠近您提供的示例代码。
  • 您是说希望表格只包含您选择的列吗?
【解决方案2】:

您的操作顺序错误,只需这样做: Datatable.rows(0//它的个数).item("列名"); 然后你可以用 foreach 循环它并制作一个列表

【讨论】:

    【解决方案3】:

    你应该尝试这样的事情

    DataRow[] row = sqlDT.Select("ColumnName =' " + Foo + " ' " , "ASC", DataViewRowState.CurrentRows);

    我希望这对你有用。

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 2016-07-31
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多