如何获取数据表的子集?

时间:2017-03-30 03:45:37

标签: c# datatable

SomeDS.SomeDT subDt = new SomeDS.SomeDT();

subDt = mainds.mainDT.Where(x=>x.status=='Active').CopyToDataTable();

基本上这个想法非常简单,我有一个mainDS,它由数据主页组成,我只需要那些活跃的数据,并存储在完全相同的数据类型下的另一个变量中。但是CopyToDataTable()会将类型更改为System.Data.DataTable,并且无法将其转换为SomeDS.SomeDT类型

1 个答案:

答案 0 :(得分:0)

检查以下

SomeDS.SomeDT subDt = mainds.mainDT.Clone();
subDt = mainds.mainDT.Where(x=>x.status=='Active').Select(x=> x).CopyToDataTable();

或者你也可以使用foreach

SomeDS.SomeDT subDt = mainds.mainDT.Clone();
foreach (DataRow dr in mainds.mainDT.Rows)
{
   if (/*put some Condition */)
   {
      subDt.ImportRow(dr);
   }
}

见下面的完整示例

        DataTable dtMain = new DataTable();
        dtMain.Columns.Add("C1", typeof(string));
        dtMain.Columns.Add("C2", typeof(string));
        dtMain.Columns.Add("C3", typeof(string));
        dtMain.Rows.Add(new object[] { "1", "test1", "test1" });
        dtMain.Rows.Add(new object[] { "2", "test2", "test2" });
        dtMain.Rows.Add(new object[] { "3", "test3", "test3" });

        DataTable dtChild = dtMain.Clone();
        dtChild = dtMain.AsEnumerable()
                        .Where(x => x.Field<string>("C2") != "test2")
                        .Select(x=> x).CopyToDataTable();

        foreach (DataRow dr in dtChild.Rows)
        {
            Console.WriteLine(dr["C1"].ToString());
            Console.WriteLine(dr["C2"].ToString());
            Console.WriteLine(dr["C3"].ToString());
        } 

输出

enter image description here