连接两个数据表时出现意外结果?

发布于 2024-10-05 21:17:02 字数 968 浏览 2 评论 0原文

 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__614[System.Data.DataRow,System.Data.DataRow,System.String,<>f__AnonymousType02[System.Data.DataRow,System.Data.DataRow ]]

 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;

The above coding gives the result in the first column as follows:
System.Linq.Enumerable+d__614[System.Data.DataRow,System.Data.DataRow,System.String,<>f__AnonymousType02[System.Data.DataRow,System.Data.DataRow]]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

只怪假的太真实 2024-10-12 21:17:02

@Prem:在了解您的代码后,我确信您会得到类似

“无法转换类型为 'd__614[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();                                
        }

@Prem: After understanding your code i am sure you will get exception like

"Unable to cast object of type 'd__614[System.Data.DataRow,System.Data.DataRow,System.String,<>f__AnonymousType02[System.Data.DataRow,System.Data.DataRow]]' to type 'System.Data.DataRow'."

on

finaldt.Rows.Add((DataRow)combinedrows); line

so you must store Linq return result in var and then you can add row to new DataTable by loop.

your code should be

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

try it out on the behalf of you i have checked it is running if not then post the error.

For to get only a particular column from DataTable you need to change LINQ like

 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")}; 

and for Retrieving data you need to do:

       foreach (var row in combinedrows)
        {
            string value = row.td1Col.ToString();                                
        }
若言繁花未落 2024-10-12 21:17:02

试试这个

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; 

try this

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; 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文