【问题标题】:C# Dataset column removal using LINQ使用 LINQ 删除 C# 数据集列
【发布时间】:2011-12-27 04:43:35
【问题描述】:

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

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

是否可以使用 LINQ 甚至一般情况下实现这一点?我不确定我的动态生成的字符串列表如何消除原始数据集上的列。

【问题讨论】:

    标签: c# linq dataset


    【解决方案1】:

    执行“经典”投影需要编译器支持

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

    【讨论】:

      【解决方案2】:
      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));
      

      【讨论】:

      • 我希望保留 ColB 并删除所有其他列。我不想删除 ColB。
      猜你喜欢
      • 1970-01-01
      • 2012-06-04
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多