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

如何将数据表拆分为多个数据表c#,c#,datatable,C#,Datatable,我有一个具有上述值的数据表。雄性分类为2。在上表中,共有2行男性。基于类别,合并两行并划分为一个单独的数据表 我需要的输出是:- 数据表1 Gender Age Category -------------------------------- Male | 10 | 2 Female | 15 | 1 Trans | 13 | 3 Female | 10 | 1 Male | 20

我有一个具有上述值的数据表。雄性分类为2。在上表中,共有2行男性。基于类别,合并两行并划分为一个单独的数据表

我需要的输出是:-

数据表1

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

Gender      Age    Category
--------------------------------
Male     |  10     |   2
Male     |  20     |   2
数据表3

Gender      Age    Category
--------------------------------
Female   |  15     |   1
Female   |  10     |   1
给你:

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();
List result=DTHead.AsEnumerable()
.GroupBy(行=>row.Field(“类别”))
.Select(g=>g.CopyToDataTable())
.ToList();
有关更多详细信息,请查看此帖子:

给你:

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();
List result=DTHead.AsEnumerable()
.GroupBy(行=>row.Field(“类别”))
.Select(g=>g.CopyToDataTable())
.ToList();
有关更多详细信息,请查看此帖子:

请参阅以下内容:

List<DataTable> result = DTHead.AsEnumerable()
            .GroupBy(row => row.Field<DataType>("Category"))
            .Select(g => g.CopyToDataTable())
            .ToList();
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序48
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“性别”,类型(字符串));
添加(“年龄”,类型(int));
添加(“类别”,类型(int));
Add(新对象[]{“Male”,10,2});
添加(新对象[]{“女性”,15,1});
Add(新对象[]{“Trans”,13,3});
添加(新对象[]{“女性”,10,1});
Add(新对象[]{“Male”,20,2});
DataTable dt1=dt.AsEnumerable()。其中(x=>x.Field(“性别”)==“男性”).CopyToDataTable();
DataTable dt2=dt.AsEnumerable()。其中(x=>x.Field(“性别”)==“Feale”).CopyToDataTable();
DataTable dt3=dt.AsEnumerable()。其中(x=>x.Field(“性别”)==“Trans”).CopyToDataTable();
}
}
}

下面是一个更通用的解决方案,可以获取列中的每种类型:

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();


        }

    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序48
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“性别”,类型(字符串));
添加(“年龄”,类型(int));
添加(“类别”,类型(int));
Add(新对象[]{“Male”,10,2});
添加(新对象[]{“女性”,15,1});
Add(新对象[]{“Trans”,13,3});
添加(新对象[]{“女性”,10,1});
Add(新对象[]{“Male”,20,2});
//更新代码
字符串[]rowNames=dt.AsEnumerable().Select(x=>x.Field(“性别”)).Distinct().ToArray();
数据集ds=新数据集();
foreach(行名称中的字符串性别)
{
DataTable newDt=dt.AsEnumerable()。其中(x=>x.Field(“性别”)==性别)。CopyToDataTable();
newDt.TableName=性别;
ds.Tables.Add(newDt);
}
}
}
}
参见以下内容:

List<DataTable> result = DTHead.AsEnumerable()
            .GroupBy(row => row.Field<DataType>("Category"))
            .Select(g => g.CopyToDataTable())
            .ToList();
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序48
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“性别”,类型(字符串));
添加(“年龄”,类型(int));
添加(“类别”,类型(int));
Add(新对象[]{“Male”,10,2});
添加(新对象[]{“女性”,15,1});
Add(新对象[]{“Trans”,13,3});
添加(新对象[]{“女性”,10,1});
Add(新对象[]{“Male”,20,2});
DataTable dt1=dt.AsEnumerable()。其中(x=>x.Field(“性别”)==“男性”).CopyToDataTable();
DataTable dt2=dt.AsEnumerable()。其中(x=>x.Field(“性别”)==“Feale”).CopyToDataTable();
DataTable dt3=dt.AsEnumerable()。其中(x=>x.Field(“性别”)==“Trans”).CopyToDataTable();
}
}
}

下面是一个更通用的解决方案,可以获取列中的每种类型:

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();


        }

    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序48
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“性别”,类型(字符串));
添加(“年龄”,类型(int));
添加(“类别”,类型(int));
Add(新对象[]{“Male”,10,2});
添加(新对象[]{“女性”,15,1});
Add(新对象[]{“Trans”,13,3});
添加(新对象[]{“女性”,10,1});
Add(新对象[]{“Male”,20,2});
//更新代码
字符串[]rowNames=dt.AsEnumerable().Select(x=>x.Field(“性别”)).Distinct().ToArray();
数据集ds=新数据集();
foreach(行名称中的字符串性别)
{
DataTable newDt=dt.AsEnumerable()。其中(x=>x.Field(“性别”)==性别)。CopyToDataTable();
newDt.TableName=性别;
ds.Tables.Add(newDt);
}
}
}
}

这可能是最干净的方法。这可能是最干净的方法。但我的数据表是动态的。有时会获取更多具有不同值的行。代码可以处理任意数量的行。我刚刚将示例数据发布到测试代码中,但我的dataTable是动态的。有时会获取更多具有不同值的行。代码可以处理任意数量的行。我刚刚发布了测试代码的示例数据。