假设我有两张桌子
表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#中有解决方案吗?
答案 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);}