Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接两个数据表_C#_Asp.net_Datatable - Fatal编程技术网

C# 连接两个数据表

C# 连接两个数据表,c#,asp.net,datatable,C#,Asp.net,Datatable,我有两个数据表 数据表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 Grana

我有两个数据表

数据表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
有什么想法吗


谢谢

您需要向表2添加主键,并在两个表之间添加关系。

我假设您的数据表名称为“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();
}
Datatable1.Columns.Add(“city”,typeof(string));
Datatable1.Columns.Add(“国家”,类型(字符串));
对于(int i=0;i
使用下面的代码

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

祝你好运

您可以使用DataTable类的marge方法

您可以从linq中获益

  • 在IEnumerable中强制转换数据表
  • 然后你可以在上面应用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
                 };
    


  • 也许可以告诉我们您使用的是哪种查询类型?实体框架还是纯sql?或者其他什么?这两个表格的记录应该如何组合?从表1的第1行到表2的第1行,或者两个表是否都共享一个键列?我需要在c#中执行,而不是在SQL中。变量的类型是DataTabletop。没有必要,如果他只是使用sql而没有任何实体框架(即使你可能猜对了),也没有什么帮助。为什么?如何添加关系?@user2024475:您使用的是哪种数据库,您的项目中是否有数据库模型,数据库存储在哪里?错误,它不是sql—“我需要在c#中执行,而不是在sql中执行–user2024475”嘿,Berkay,我怎么知道!你应该在你的问题中提到这一点。是的,我知道,这就是为什么我给你一个机会来发展你的答案,而不是给你-1。谢谢你。我已经重新格式化了我的答案。也许它能帮助你,你现在可以给我+1!!首先,这不是我的问题,其次他只是想合并两个数据表,所以,你的答案仍然是无效的。试着用c来回答这个问题。若你们不能,那个么删除答案更合适。错了,在两个DataTables中并没有公共列看起来不错,但这在数据库构建中不是更容易吗?我认为这是我的解决方案。我可以试试。为什么是“安全”?此函数有一个错误。@user2024475是的,很抱歉,您也可以使用我自己的类。toString()。我编辑了我的答案,现在你可以检查了that@Vogel612是的,这是更“恰当”的方式。但有时合并两个datatable并不是一件坏事。@Berkay我觉得它太傻了:创建两个表。然后将表2添加到表1中。保存表1和表2。从现在开始使用表1的全部代码,然后。。。就是这样,你不是真的那样做的,是吗?只需将linq添加到标签中,就可以使用linq发布答案…@Vogel612是的,我做了我认为应该做的。很抱歉告诉你,但你不应该让人们使用他们不理解的东西。你会不会在你可能看到的问题下面看看,这个家伙不知道实体框架是什么。这是林克的基本借口。因此,将linq添加到标签中是完全不合适的,不值得一个2k代表user@Vogel612就
    2K
    rep用户而言,我可以轻松到达那里。大约一天内。:)@但至少你对
    EF
    有一些(即使是很小的)知识,但C#不一定能使LINQ