object combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable()
join dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
select new { dt1, dt2 };
DataTable finaldt = new DataTable("FinalTable");
finaldt.Columns.Add(new DataColumn("sp",typeof(string)));
finaldt.Columns.Add(new DataColumn("Method",typeof(string)));
finaldt.Columns.Add(new DataColumn("Class",typeof(string)));
finaldt.Columns.Add(new DataColumn("BLLMethod",typeof(string)));
DataRow newrow = finaldt.NewRow();
finaldt.Rows.Add((DataRow)combinedrows);
dataGridView5.DataSource = finaldt;
以上编码在第一栏中给出如下结果:
System.Linq.Enumerable + d__61 4[System.Data.DataRow,System.Data.DataRow,System.String,<>f__AnonymousType0
2 [的System.Data.DataRow,的System.Data.DataRow]]
答案 0 :(得分:2)
@Prem:在理解你的代码后,我相信你会得到像
这样的异常“无法转换类型为'd__61 4[System.Data.DataRow,System.Data.DataRow,System.String,<>f__AnonymousType0
的对象2 [System.Data.DataRow,System.Data.DataRow]]''键入'System.Data.DataRow'。”
on
finaldt.Rows.Add((DataRow中)combinedrows);线
所以你必须将Linq返回结果存储在var中,然后你可以通过循环向新的DataTable添加行。
你的代码应该是
var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable()
join dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
select new { dt1, dt2 };
DataTable finaldt = new DataTable("FinalTable");
finaldt.Columns.Add(new DataColumn("sp", typeof(string)));
finaldt.Columns.Add(new DataColumn("Method", typeof(string)));
finaldt.Columns.Add(new DataColumn("Class", typeof(string)));
finaldt.Columns.Add(new DataColumn("BLLMethod", typeof(string)));
DataRow newrow = finaldt.NewRow();
foreach (var row in combinedrows)
{
DataRow dataRow = finaldt.NewRow();
dataRow.ItemArray = row.dt1.ItemArray;
finaldt.Rows.Add(dataRow);
}
代表你试试我已检查它是否正在运行,如果没有,则发布错误。
要从DataTable中仅获取特定列,您需要更改LINQ,如
var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable()
join dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
select new { td1Col = dt1.Field<string>("Tab1col2")};
并且要检索您需要执行的数据:
foreach (var row in combinedrows)
{
string value = row.td1Col.ToString();
}
答案 1 :(得分:1)
试试这个
var combinedrows = from dt1 in DsResults.Tables[0].AsEnumerable()
join dt2 in DsResults.Tables[1].AsEnumerable() on dt1.Field<string>("MethodName") equals dt2.Field<string>("MethodName")
select new { dt1, dt2 };
DataTable finaldt = new DataTable("FinalTable");
finaldt.Columns.Add(new DataColumn("sp",typeof(string)));
finaldt.Columns.Add(new DataColumn("Method",typeof(string)));
finaldt.Columns.Add(new DataColumn("Class",typeof(string)));
finaldt.Columns.Add(new DataColumn("BLLMethod",typeof(string)));
foreach (var row in combinedrows)
{
DataRow drow = finaldt.NewRow();
drow.ItemArray = row.dt1.ItemArray;
finaldt.Rows.Add(drow34);
}
dataGridView5.DataSource = finaldt;