我有一個包含多列的數據集,我所要做的就是刪除列表中的所有列。使用LINQ刪除C#數據集列刪除使用LINQ的數據集列
因此,例如,數據集具有列「ColA」,「ColB」和「ColC」。我的列表包含1個項目,字符串「ColB」。我想要做的是刪除「ColA」和「ColC」,或者說只保留「ColB」。
是否有可能將這與LINQ,甚至一般?我不確定我的動態生成的字符串列表如何消除原始數據集上的列。
我有一個包含多列的數據集,我所要做的就是刪除列表中的所有列。使用LINQ刪除C#數據集列刪除使用LINQ的數據集列
因此,例如,數據集具有列「ColA」,「ColB」和「ColC」。我的列表包含1個項目,字符串「ColB」。我想要做的是刪除「ColA」和「ColC」,或者說只保留「ColB」。
是否有可能將這與LINQ,甚至一般?我不確定我的動態生成的字符串列表如何消除原始數據集上的列。
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));
表演「經典」投影需要的編譯器支持
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;
}
我正在尋找保持ColB並刪除所有其他列。我不打算刪除ColB。 – JesseBuesking