C#:从Datatable中删除列

时间:2017-11-16 13:42:09

标签: c# sql-server datatable

假设我有两张桌子

表1包含以下列(Dots表示其间的列)

id int
name varchar
.
.
.
.
LastChanged datetime

表2包含以下列

id int
Address varchar
.
.
.
.
LastChanged datetime

我在C#中执行了如下所示的查询,并将结果存储在Datatable

select * from table1 t1
inner join  table2 t2
on t1.id=t2.id

现在我不想在结果中使用列LastChanged

两个表中都有

LastChanged列。由于Datatable不允许重复的列名称,因此结果中的LastChanged列之一会重命名为LastChanged1

所以当我尝试使用

删除列时
if (table.Columns.Contains("LastChanged"))
                table.Columns.Remove("LastChanged");

只删除了一个LastChanged。另一个仍然存在。

一种解决方案是在查询中消除LastChanged 通过指定所需的列。 但它使查询很长,因为结果中几乎所有列都需要LastChanged

C#中有解决方案吗?

2 个答案:

答案 0 :(得分:1)

仔细阅读:Bad habits to kick : using SELECT * / omitting the column list

但是,要回答这个问题,你可以采用这种LINQ方法:

string colName = "LastChanged";
var lastChangedColumnList = table.Columns.Cast<DataColumn>()
  .Where(c => c.ColumnName.StartsWith(colName) && c.ColumnName.Substring(colName.Length).All(char.IsDigit))
  .ToList();

foreach(DataColumn col in lastChangedColumnList)
    table.Columns.Remove(col);

答案 1 :(得分:1)

您可以使用Linq实现此目标

var lst = table.Columns.Cast<DataColumn>()
     .Where(x => x.ColumnName.StartsWith("LastChanged"))
     .ToList();


foreach(DataColumn col in lst){
      table.Columns.Remove(col);}