2011-11-11 107 views
2

我有一個包含多列的數據集,我所要做的就是刪除列表中的所有列。使用LINQ刪除C#數據集列刪除使用LINQ的數據集列

因此,例如,數據集具有列「ColA」,「ColB」和「ColC」。我的列表包含1個項目,字符串「ColB」。我想要做的是刪除「ColA」和「ColC」,或者說只保留「ColB」。

是否有可能將這與LINQ,甚至一般?我不確定我的動態生成的字符串列表如何消除原始數據集上的列。

回答

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)); 
+0

我正在尋找保持ColB並刪除所有其他列。我不打算刪除ColB。 – JesseBuesking

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