【问题标题】:Using LINQ Query DataTable using partial column names使用部分列名使用 LINQ Query DataTable
【发布时间】:2013-11-07 16:41:51
【问题描述】:

我有一个列数可变的 DataTable。 我想创建一个 LINQ 查询,该查询从以“B_”开头的列中返回数据。 我有一个查询,它返回以“B_”开头的列名。如下:

var arrayNames = (from DataColumn x in stationTable.Columns
                          where x.ColumnName.Contains("B_")
                          select x.ColumnName).ToArray();

现在我有了列名,如何使用此数组创建查询以返回列中的数据?

谢谢

【问题讨论】:

    标签: c# linq datatable


    【解决方案1】:

    您可以创建一个DataView 来隐藏列表中的列not - 这样您就可以保留任何类型信息:

    var arrayNames = (from DataColumn x in stationTable.Columns
                              where !x.ColumnName.Contains("B_")  // note the reversal
                              select x.ColumnName).ToArray();
    
    DataView dv = new DataView(stationTable);
    
    foreach (string colName in arrayNames)    
        dv.Table.Columns[colName].ColumnMapping = MappingType.Hidden
    

    【讨论】:

      【解决方案2】:

      有几种方法可以解决这个问题。

      如果您不关心按列类型对项目进行分组,则此查询可以完成:

      var query = from DataColumn col in stationTable.Columns
                  from DataRow row in stationTable.Rows
                  where col.ColumnName.StartsWith("B_")
                  select row[col.ColumnName];
      

      但是,为了保持分组,您可以使用如下查找:

      var query = (from DataColumn col in stationTable.Columns
                  from DataRow row in stationTable.Rows
                  where col.ColumnName.StartsWith("B_")
                  select new { Row = row[col.ColumnName], col.ColumnName })
                  .ToLookup(o => o.ColumnName, o => o.Row);
      
      foreach (var group in query)
      {
          Console.WriteLine("ColumnName: {0}", group.Key);
          foreach (var item in group)
          {
              Console.WriteLine(item);
          }
      }
      

      这两种方法的缺点是您最终会得到一个object。考虑到问题的动态性质,以强类型方式保留结果需要一些额外的工作。

      【讨论】:

      • 谢谢谢谢谢谢!这正是我所需要的!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多