@ Prem: После понимания вашего кода я уверен, что вы получите исключение, например
"Невозможно привести объект типа 'd__61 4[System.Data.DataRow,System.Data.DataRow,System.String,<>f__AnonymousType0
2 [System.Data.DataRow, System.Data.DataRow]]' к типу 'System.Data.DataRow'."
на
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();
}