连接两个数据表并将结果返回到另一个数据表中

时间:2011-07-07 11:15:24

标签: c# asp.net linq datatable inner-join

问:

我有两个数据表,我想内连接并通过LINQ将结果返回到另一个数据表中。

DataTable dt1 = StaffCVDAL.getCourses(int.Parse(Session["emp_num"].ToString()));
DataTable dt2 = cc1lectcrsfilesDAL.ListFiles(int.Parse(Session["emp_num"].ToString()), int.Parse(Session["permission_code"].ToString()));
DataTable dt = from t1 in dt1.AsEnumerable()
               join t2 in dt2.AsEnumerable()
                      on t1["crsnum"] equals t2["crsnum"]
               select new { t1["crsname"],t2["group"] }; //the problem is here .

1 个答案:

答案 0 :(得分:3)

问题是查询表达式(LINQ)返回您创建的匿名类型的IEnumerable,而不是DataTable。恕我直言,我更喜欢使用集合而不是数据表,但是如果你想拥有一个DataTable,你可以自己从集合中创建并填充它,如下所示:

var collection = from t1 in dt1.AsEnumerable()
                 join t2 in dt2.AsEnumerable()
                    on t1["crsnum"] equals t2["crsnum"]
                 select new { Name = t1["crsname"], Group = t2["group"] }; 
DataTable result = new DataTable("NameGroups");
result.Columns.Add("crsname", typeof(string));
result.Columns.Add("group", typeof(int));

foreach (var item in collection)
{
   result.Rows.Add(item.Name, item.Group);
}

有关详情和更一般的解决方案,请查看this