使用LINQ删除C#数据集列

时间:2011-11-11 17:01:38

标签: c# linq dataset

我有一个包含多个列的数据集,我想要做的就是删除列表中的所有列。

因此,例如,数据集包含“ColA”,“ColB”和“ColC”列。我的列表包含1个项目,字符串“ColB”。我想要做的是删除“ColA”和“ColC”,或者说只保留“ColB”。

是否可以使用LINQ,甚至一般情况下将其关闭?我不确定我动态生成的字符串列表如何能够删除原始数据集上的列。

2 个答案:

答案 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;
}