我有一个包含多个列的数据集,我想要做的就是删除列表中的所有列。
因此,例如,数据集包含“ColA”,“ColB”和“ColC”列。我的列表包含1个项目,字符串“ColB”。我想要做的是删除“ColA”和“ColC”,或者说只保留“ColB”。
是否可以使用LINQ,甚至一般情况下将其关闭?我不确定我动态生成的字符串列表如何能够删除原始数据集上的列。
答案 0 :(得分:1)
var columnsFromTable = dt.Columns;// get all your column here
var columnsFromCollection = new string[] { "ColB" };//column to remove
Array.ForEach(columnsFromCollection,col=>
dt.Columns.Remove(col));
答案 1 :(得分:0)
执行“经典”投影需要编译器支持
var res = myList.Select(d => new {d.ColB});
(上面的代码创建了一个匿名类,其中包含一个名为ColB
的属性)
但是,如果执行速度对您来说不是很重要,可以使用ExpandoObject而不是编译器生成的类,如下所示:
var columnList = new[] {"ColB"};
var res = myList.Select(d => Project(d, columnList));
...
static ExpandoObject Project(MyDataObject d, string[] columns) {
var res = new ExpandoObject();
// Using reflection here is a much better solution
if (Array.IndexOf(columns, "ColA") >= 0) res.ColA = d.ColA;
if (Array.IndexOf(columns, "ColB") >= 0) res.ColB = d.ColB;
if (Array.IndexOf(columns, "ColC") >= 0) res.ColC = d.ColC;
return res;
}