【问题标题】:removing column and rows from DataTable using Linq使用 Linq 从 DataTable 中删除列和行
【发布时间】:2015-05-10 12:26:08
【问题描述】:

我有一个 DataTable 作为输入,其中包含许多列和行,

这是一个示例表:

我只想获取带有 Play 列的 Weather(sunny rows)(任何值)

所以输出可以是另一个像这样的DataTable:

所以任何想法都可以帮助我很多,谢谢:)

【问题讨论】:

  • 结果你真的需要一个DataTable吗?为什么不是列表?
  • 我需要两列作为输出,所以列表将包含什么?
  • 你可以看到我的答案,你会得到一个包含所需值的列表。另一个 DataTable 真的没用。

标签: c# database linq datatable


【解决方案1】:

结果是否有另一个DataTable?我只是使用命名或匿名类型。

var filtered = sourceTable.Rows.Cast<DataRow>()
.Where(x => x.Field<string>("WEATHER") == "sunny")
.Select(x => new
{
    Weather = x.Field<string>("WEATHER"),
    Play = x.Field<string>("PLAY")
})
.ToList();

那么你就可以把它当做

foreach (var item in filtered)
{
    Console.WriteLine(string.Format("Weather ={0}, Play = {1}", item.Weather,item.Play));
}

如果您需要结果为DataTable,您可以创建一个并手动添加行。

【讨论】:

  • 所以如果我想做另一个Linq语句,在新列表上做就可以了吗?
  • 例如,我可能需要在新列表中进行分组
  • @MBH 按哪一栏分组?列表中只有过滤后的数据。
  • @MBH 是的。 foreach (var groupped in filtered.GroupBy(x =&gt; x.Play)) {int groupCount = groupped.Count();}
  • 我已经回答了你的问题。如果您需要更多问题,请提出另一个问题。
【解决方案2】:

如果可以获取匿名列表,您可以这样做:

var result = dt.AsEnumerable()
               .Where(x => x["WEATHER"] == "sunny")
               .Select(x => 
                     new 
                        { 
                            WEATHER = x["WEATHER"] as string, 
                            PLAY = x["PLAY"] as string 
                        });

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2015-06-13
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多