简体   繁体   English

如何将DataTable拆分为多个数据表C#

[英]how to DataTable split into mutiple datatables c#

Gender      Age    Category
--------------------------------
Male     |  10     |   2
Female   |  15     |   1
Trans    |  13     |   3
Female   |  10     |   1
Male     |  20     |   2

i have a datatable with above values. 我有一个具有上述值的数据表。 Male CategoryId is 2. in above table there are total 2 Males rows. 男性CategoryId为2。在上表中,共有2男性行。 based on Category, merged two rows and divide into a seperate datatable. 基于类别,合并两行并分成一个单独的数据表。

My required output is :- 我需要的输出是:

Datatable 1 数据表1

Gender      Age    Category
--------------------------------
Male     |  10     |   2
Male     |  20     |   2

DataTable 2 数据表2

Gender      Age    Category
--------------------------------
Female   |  15     |   1
Female   |  10     |   1

DataTable 3 数据表3

Gender      Age    Category
--------------------------------
Trans    |  13     |   3
var view = sourceDataTable.DefaultView;

view.RowFilter = "Category = 2";
var maleDataTable = view.ToTable();

view.RowFilter = "Category = 1";
var femaleDataTable = view.ToTable();

view.RowFilter = "Category = 3";
var transDataTable = view.ToTable();

Here you go: 干得好:

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

For more details please check this post: Split Tables 有关更多详细信息,请检查此帖子: 拆分表

See following : 请参阅以下内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;


namespace ConsoleApplication48
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Gender", typeof(string));
            dt.Columns.Add("Age", typeof(int));
            dt.Columns.Add("Category", typeof(int));

            dt.Rows.Add(new object[] {"Male", 10, 2});
            dt.Rows.Add(new object[] {"Female", 15, 1});
            dt.Rows.Add(new object[] {"Trans", 13, 3});
            dt.Rows.Add(new object[] {"Female", 10, 1});
            dt.Rows.Add(new object[] {"Male", 20, 2});

            DataTable dt1 = dt.AsEnumerable().Where(x => x.Field<string>("Gender") == "Male").CopyToDataTable();
            DataTable dt2 = dt.AsEnumerable().Where(x => x.Field<string>("Gender") == "Feale").CopyToDataTable();
            DataTable dt3 = dt.AsEnumerable().Where(x => x.Field<string>("Gender") == "Trans").CopyToDataTable();


        }

    }

}

Here is a more generic solution that get every type in a column : 这是一种更通用的解决方案,可将每种类型都归入一列:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;


namespace ConsoleApplication48
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Gender", typeof(string));
            dt.Columns.Add("Age", typeof(int));
            dt.Columns.Add("Category", typeof(int));

            dt.Rows.Add(new object[] { "Male", 10, 2 });
            dt.Rows.Add(new object[] { "Female", 15, 1 });
            dt.Rows.Add(new object[] { "Trans", 13, 3 });
            dt.Rows.Add(new object[] { "Female", 10, 1 });
            dt.Rows.Add(new object[] { "Male", 20, 2 });

            //updated code
            string[] rowNames = dt.AsEnumerable().Select(x => x.Field<string>("Gender")).Distinct().ToArray();
            DataSet ds = new DataSet();

            foreach (string gender in rowNames)
            {
                DataTable newDt = dt.AsEnumerable().Where(x => x.Field<string>("Gender") == gender).CopyToDataTable();
                newDt.TableName = gender;
                ds.Tables.Add(newDt);

            }
        }

    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM