SomeDS.SomeDT subDt = new SomeDS.SomeDT();
subDt = mainds.mainDT.Where(x=>x.status=='Active').CopyToDataTable();
基本上这个想法非常简单,我有一个mainDS,它由数据主页组成,我只需要那些活跃的数据,并存储在完全相同的数据类型下的另一个变量中。但是CopyToDataTable()
会将类型更改为System.Data.DataTable
,并且无法将其转换为SomeDS.SomeDT
类型
答案 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());
}
输出