首页 > 解决方案 > 连接两个数据表并将结果保存在数据表中

问题描述

我有 2 个数据集,我想加入两个数据集并将结果保存在数据表中。

我能够加入表格,但是在将结果保存在数据表中时,它会引发错误 “无法转换类型为 d__38 4[System.Data.DataRow,System.Data.DataRow,System.String,<>f__AnonymousType0 7[ 的对象System.String,System.String,System.Int32,System.Int32,System.String,System.String,System.String]]' 输入'System.Data.DataTable'

我的代码:

private DataSet joindatasets(DataSet ds1, DataSet dsHeader)
        {
            DataTable dt; 
            DataSet ds = new DataSet(); 
            DataTable dt1=new DataTable();

        dt1.Columns.Add("PracticeCode", typeof(string));
        dt1.Columns.Add("PracticeName", typeof(string));
        dt1.Columns.Add("High", typeof(int));
        dt1.Columns.Add("Medium", typeof(int));
        dt1.Columns.Add("username", typeof(string));
        dt1.Columns.Add("MIAlertHeader", typeof(string));
        dt1.Columns.Add("MIAlertFooter", typeof(string));

        if (dsHeader.Tables.Count > 0)
        {
            for (int i = 0; i <= dsHeader.Tables.Count - 1; i++)
            {
                dt = dsHeader.Tables[i];

                var query = from table1 in ds1.Tables[0].AsEnumerable()
                             join table2 in dt.AsEnumerable()
                             on (string)table1["PracticeCode"] equals (string)table2["PracticeCode"]


                            select new
                            {
                                PracticeCode = (string)table1["PracticeCode"],
                                PracticeName = (string)table1["PracticeName"],
                                High = (int)table1["High"],
                                Medium = (int)table1["Medium"],
                                username = (string)table2["username"],
                                MIAlertHeader = (string)table2["MIAlertHeader"],
                                MIAlertFooter = (string)table2["MIAlertFooter"]
                            };
                dt1 = (DataTable)query;

            }
        }

        return ds;
    }

请帮忙

标签: c#asp.net

解决方案


当您尝试转换IEnumerable<object>DataRow. 要解决此问题,您必须使用DataTable.LoadDataRow 方法+ CopyToDataTable 方法

            dt1 = (from table1 in ds1.Tables[0].AsEnumerable()
                         join table2 in dt.AsEnumerable()
                         on (string)table1["PracticeCode"] equals (string)table2["PracticeCode"]
                        select dt1.LoadDataRow(new object[]
                        {
                            (string)table1["PracticeCode"],
                            (string)table1["PracticeName"],
                            (int)table1["High"],
                            (int)table1["Medium"],
                            (string)table2["username"],
                            (string)table2["MIAlertHeader"],
                            (string)table2["MIAlertFooter"]
                        }, false)).CopyToDataTable();

更多详细信息,您可以在此处找到:从查询创建数据表 (LINQ to DataSet)


推荐阅读