【问题标题】:Get specific column header names from DataTable从 DataTable 中获取特定的列标题名称
【发布时间】:2017-12-26 14:44:29
【问题描述】:

我需要根据值获取特定的列标题名称。

例如:我正在使用以下查询来获取列标题列表,它工作正常,除此之外,我可以获取具有特定名称的列名称,例如 Department 单独。

LINQ

string[] columnNames = dt.Columns.Cast<DataColumn>()
                         .Select(x => x.ColumnName)
                         .ToArray();

如何向此查询添加包含或存在以获取特定列。

【问题讨论】:

  • 你的意思是要加.Where(x =&gt; x == "Department")
  • @DavidG xDataColumn。这怎么可能?可能你的意思是.Where(x =&gt; x.ColumnName == "Name")。检查我的答案。
  • @S.Akbari 如果您将该行放在Select 之后,则不会。我没有回答这个问题,因为当您已经拥有字符串时,从字符串列表中选择单个字符串是不清楚且毫无意义的。我希望其他人也有同样的想法......
  • @DavidG 是的,将Where 放在Select 之后它可以工作,我也指出了这一点。我以为你说用Where替换Select
  • @S.Akbari 我评论的第二部分没什么可说的?

标签: c# linq datatable


【解决方案1】:

只需添加一个过滤器,如下所示:

string[] columnNames = dt.Columns.Cast<DataColumn>()
                             .Select(x => x.ColumnName)
                             .Where(x => x == "Department")
                             .ToArray();

【讨论】:

    【解决方案2】:
    List<string> containsKeys = new List<string>();
    containsKeys.Add("SomeWildCard");
    
    DataTable dt = new DataTable();
    string[] columnNames = dt.Columns.Cast<DataColumn>()
                                 .Select(x => x.ColumnName)
                                 .ToArray().Where(t => containsKeys.Contains(t)).ToArray();
    

    【讨论】:

      【解决方案3】:

      您可以选择然后过滤结果:

      .Select(x => x.ColumnName).Where(c => c == "Department")
      

      或者先过滤然后选择:

      .Where(x => x.ColumnName == "Department").Select(c => c.ColumnName)
      

      【讨论】:

        【解决方案4】:

        Columns 属性是DataColumnCollection 类型,它有一个索引器public DataColumn this[string name] 来按名称获取DataColumn:

        DataColumn dc = dt.Columns["Department"];
        

        要按名称获取多个列,请使用 Select() 和索引器:

        List<string> names = new List<string> { "Department", "Something" };
        DataColumn[] columns = names.Select(name => dt.Columns[name]).ToArray();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-05
          相关资源
          最近更新 更多