【问题标题】:Split a DataTable into 2 or more DataTables based on Column value根据列值将数据表拆分为 2 个或更多数据表
【发布时间】:2012-09-26 06:16:48
【问题描述】:

我有一个名为“DTHead”的数据表,其中包含以下记录,

 MIVID      Quantity         Value
------     ----------       --------
   1           10             3000
   1           20             3500
   1           15             2000
   2           20             3000
   2           50             7500
   3           25             2000

这里,我需要根据MIVID将上面的DataTable拆分成三个表,如下所示;

DTChild1:

  MIVID           Quantity        Value
 -------         ----------     ---------
   1                10             3000
   1                20             3500
   1                15             2000

DTChild2:

  MIVID           Quantity        Value
 -------         ----------     ---------
   2                20             3000
   2                50             7500

DTChild3:

  MIVID           Quantity        Value
 -------         ----------     ---------
    3               25             2000

假设,如果 Header DataTable 包含 4 个不同的 MIVID 表示,那么应该根据 MIVID 创建 4 个 Child DataTable。如何做到这一点?

【问题讨论】:

    标签: c# asp.net visual-studio-2010 datatable


    【解决方案1】:
    DataTable tbl = new DataTable("Data").AsEnumerable()
        .Where(r => r.Field<int>("ParentId") == 1) // ParentId == 1
        .Where(r => r.Field<int>("Id") > 3) // Id > 3
        .Where(r => r.Field<string>("Name").Contains("L")) // Name contains L
        .OrderBy(r => r.Field<int>("Id")) // Order by Id
        .CopyToDataTable();
    

    【讨论】:

    • 你能看看我的question 之一吗?
    【解决方案2】:

    使用LINQ to DataTable将第一列按GroupBy分组,并使用方法CopyToDataTable将行列表复制到DataTable

     List<DataTable> result = DTHead.AsEnumerable()
                .GroupBy(row => row.Field<int>("MIVID"))
                .Select(g => g.CopyToDataTable())
                .ToList();
    

    然后你可以得到你所期望的作为数据表列表的结果。

    【讨论】:

    • 很抱歉挖掘了一个旧线程,但是,如果它必须按 MIVID 和另一个字段进行分组,您认为它会如何工作?
    • @RohithShenoyG:你可以使用匿名类型,比如:GroupBy(row =&gt; new { Field1 = row.Field&lt;int&gt;('Field1'), Field2 = row.Field&lt;int&gt;('Field2')})
    • @Cuong Le 不错,为我节省了很多时间。只需要是 " 而不是 ' (不是想成为一个聪明人,你显然知道这一点,但可能直接在这里写了“多字段评论”)。
    • @śmiglidigli:我不确定我理解你的意思,请你解释一下
    猜你喜欢
    • 1970-01-01
    • 2022-12-22
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2022-01-07
    • 2021-04-29
    相关资源
    最近更新 更多