【问题标题】:Concatenate two DataTables连接两个数据表
【发布时间】:2013-02-15 11:41:29
【问题描述】:

我有两个数据表

数据表1:

id  name
--  ----
1   jhon
2   peter

数据表2:

city     country
---      -------
Sevilla  Spain
Granada  Spain

id是对应的。我需要连接这些数据表的列。

这是想要的结果:

id  name   city     country
--  ----   ----     -------
1   Jhon   Sevilla  Spain
2   Peter  Granada  Spain

有什么想法吗?

谢谢!

【问题讨论】:

  • 也许可以告诉我们您使用的是哪种查询类型?实体框架还是纯 sql?还是别的什么?
  • 两张表的记录应该如何合并?表 1 中的第 1 行到表 2 中的第 1 行,或者是否存在两个表共享的键列?
  • 我需要在c#中做,而不是在sql中
  • 变量类型为DataTable

标签: c# asp.net datatable


【解决方案1】:

我假设您的 DataTable 名称是 "DataTable1" 和 "DataTable2" ,您可以使用以下代码将它们合并到 DataTable1 中;

Datatable1.Columns.Add("city", typeof(string));
Datatable1.Columns.Add("country", typeof(string));

for (int i = 0; i < Datatable1.Rows.Count; i++)
{
    Datatable1.Rows[i][2] = DataTable2.Rows[i][0].toString();
    Datatable1.Rows[i][3] = DataTable2.Rows[i][1].toString();
}

【讨论】:

  • 看起来不错,但建库不是更简单吗?
  • 我认为这是我的解决方案。我可以试试。为什么选择“ConvertSafe”?我的这个函数有错误。
  • @user2024475 是的,抱歉,这是我自己的课程,您也可以使用 .toString()。我现在编辑了我的答案,你可以检查一下
  • @Vogel612 是的,这是更“正确”的方式。但是有时合并两个数据表并不是一件坏事。
  • @Berkay 对我来说似乎很愚蠢:创建 2 个表。然后将表 2 添加到表 1。保存表 1 和表 2。从现在开始使用表 1 的整个代码,然后......就是这样。
【解决方案2】:

你需要给table2添加主键,并添加两个表之间的关系。

【讨论】:

  • 停止。没有必要,如果他只使用没有任何实体框架的 sql 也没有真正的帮助(即使你可能猜对了;))
  • 为什么?如何添加关系?
  • @user2024475 再次:您使用的是哪种数据库,您的项目中是否有数据库模型,数据库存储在哪里?
【解决方案3】:

可以使用DataTable类的marge方法

【讨论】:

  • 错,两个数据表中没有公共列
【解决方案4】:

你可以受益于linq

  1. 将您的数据表投射到 IEnumerable 中
  2. 然后你可以在它上面应用linq。

    var results = from myRow in DataTable1.AsEnumerable()
    var results2 = from myRow in DataTable2.AsEnumerable()
    
    var result3= from row1 in results
                  join row2 in results2
                   select new
                  {
                      row1.id,
                      row1.name,
                      row2.city,
                      row2.country
                 };
    

【讨论】:

  • 你不是真的那样做吗?只需将 linq 添加到标签即可使用 linq 发布答案...
  • @Vogel612 是的,我按照我的想法做了。
  • 很抱歉告诉你,但你不应该让人们使用他们不理解的东西。您是否看过下面您可能看到的问题,这个人不知道实体框架是什么。这是linq的基本借口。因此将 linq 添加到标签是完全不合适的,不值得 2k 代表用户
  • @Vogel612 2K 代表用户担心我可以轻松到达那里。一天左右。 :)
  • @krshekhar 但至少你对EF 有一些(即使是很小的)知识,但C# 不一定能制作LINQ
【解决方案5】:

使用下面的代码。

SqlDataSource1.ConnectionString = "--YOUR CONNECTION STRING--";
SqlDataSource1.SelectCommand = "select DataTable1.id,DataTable1.name,DataTable2.city,DataTable2.country from DataTable1,DataTable2
";
SqlDataSource1.DataBind();

祝你好运!

【讨论】:

  • 错了,不是sql——“我需要在c#中做,而不是在sql中——user2024475”
  • 嘿,伯凯,我怎么知道!您应该在问题中提及这一点。
  • 是的,我知道,这就是为什么我给你一个机会来发展你的答案,而不是给你-1。
  • 谢谢。我已经重新格式化了我的答案。对你有帮助吗,你现在可以给我+1!!
  • 首先,这不是我的问题,其次他只是想合并两个数据表,所以你的答案仍然无效。尝试使用 c# 来回答这个问题。如果你不能,删除答案更合适。
猜你喜欢
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2015-05-28
  • 2020-09-09
  • 2013-07-11
  • 2016-11-18
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多