【问题标题】:join two datatable and return the result in another data table连接两个数据表并在另一个数据表中返回结果
【发布时间】:2011-09-30 09:14:01
【问题描述】:

问:

我有两个数据表,我想通过 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 .

【问题讨论】:

  • 是否明确需要结果应该是DataTable? LINQ 返回您创建的匿名类型的 IEnumerable
  • 是的,我需要datatable 中的结果,这就是问题所在。
  • 有什么理由不能使用 sql 视图?
  • 嗯,我只是想以更高性能的方式将结果作为我的 gridview 的数据源。

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


【解决方案1】:

问题在于查询表达式 (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

【讨论】:

  • ` select new { t1["crsname"],t2["group"] }` 这部分编译出错---> invalid anonymous type member declarator.
  • 当然可以 :)。可怜的 C# 无法弄清楚字段的名称应该是什么。将编辑答案。
  • 非常感谢,但是当我追踪时,我发现collection 是空的,而inner 产生结果!!。
猜你喜欢
  • 1970-01-01
  • 2019-08-15
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 2016-10-21
  • 2012-12-24
相关资源
最近更新 更多