如何将vb.net中的两个表合并为sql和withou数据库中的完全外部联接

如何将vb.net中的两个表合并为sql和withou数据库中的完全外部联接,vb.net,Vb.net,我有两个数据表表A和表B 他们都有一些数据 我想在vb.net中将两个数据表合并到一个表中,而不是在后端,只是在前端,即vb.net Table A --------------------------- ID Name Balance 1 neha 10 2 khushi 20 3 kaffi 40 4 manju

我有两个数据表
表A
表B

他们都有一些数据

我想在vb.net中将两个数据表合并到一个表中,而不是在后端,只是在前端,即vb.net

 Table A
---------------------------
ID        Name            Balance
1         neha             10
2         khushi           20
3         kaffi            40
4         manju            50


 Table B
  ------------------------------

 ID        Address          Balance
  1         jind               10
  2        kaithal             20
  5        usa                 20
  6        gurgaon             20
  7        Dalhousie           20
 Table C =>TableA+TableB(As Outer Join)
结果



因此,如果您只想在vb.net中执行此操作,我只是建议使用一种传统方法(不要问我性能问题)

首先,将两个表中的数据放入两个数据表中。然后在检查id的同时使用两个for lop循环遍历数据表。如果id相同,则将所有数据写入另一个数据表中

代码等价物

dim da1,da2,da3 as datatable
dim introw as integer
''fill the datatables da1 and da2 with data from tableA and TableB

da3.columns.add("id")
da3.columns.add("name")
da3.columns.add("adress")
da3.columns.add("balance")

for intcount1=0 to da1.rows.count-1
  for intcount2=0 to da2.rows.count-1
   if da1.rows(intcount1).item("id")=da2.rows(intcount2).item("id") then 
       da3.addrows(1)
       da3.rows(introw).item(0)=da1.rows(introw).item(0)
       da3.rows(introw).item(1)=da1.rows(introw).item(1)
       da3.rows(introw).item(2)=da2.rows(introw).item(1)
       da3.rows(introw).item(3)=da1.rows(introw).item(2)+da1.rows(introw).item(2)
 end if
next 
next
请根据您的逻辑进行修改。我不知道这是否对您有帮助,只是试图让您了解问题。

试试这个:

    Dim Joined = New DataTable
    Joined.Columns.AddRange({New DataColumn("ID"), New DataColumn("Name"), New DataColumn("Address"), New DataColumn("Balance")})

    Call (From t1 In TableA
          Join t2 In TableB On t1("ID") Equals t2("ID")
          Select Joined.Rows.Add(t1("ID"), t1("Name"), t2("Address"), CSng(t1("Balance")) + CSng(t2("Balance")))).ToList

你会凭身份证参加吗?您可以只创建一个连接两个表的视图,然后可以像查询实际表一样随意查询该视图。或者是一个存储过程,返回作为单个表连接的两个表。有一个存储过程返回表,所以我想根据id合并这两个表。我已经使用了数据关系,但没有得到我想要的结果,因为它提供了作为父表和子表的结果,但在该表中,我想要两个表的数据表不是单亲表上面显示的结果只是一个普通的外部联接。我建议您在视图或存储过程中进行联接。不,我不能这样做,因为我正在处理实体框架,每个表都来自不同的数据库,所以过程是动态的,取决于父=>子关系,它将以n个数字进行。所以我不能在后端处理,我必须在前端处理这些,因为我不知道,也许使用LINQ做一些类似于这个问题的提问者试图做的事情是最好的方法,那么在这种情况下,上面的LINQ查询抛出错误方法“join”的定义是不可访问的
    Dim Joined = New DataTable
    Joined.Columns.AddRange({New DataColumn("ID"), New DataColumn("Name"), New DataColumn("Address"), New DataColumn("Balance")})

    Call (From t1 In TableA
          Join t2 In TableB On t1("ID") Equals t2("ID")
          Select Joined.Rows.Add(t1("ID"), t1("Name"), t2("Address"), CSng(t1("Balance")) + CSng(t2("Balance")))).ToList
    ViewState("ParentRowsCount") = ds.Tables(ParentTable).Rows.Count
            ' Merge parent and child table
            ds.Tables(ParentTable).Merge(ds.Tables(ChildTable))
            ' create uniqueness through remove duplicate keys 
            Dim dtpartbl As DataTable = ds.Tables(ParentTable)
            dtpartbl = RemoveDuplicateRows(dtpartbl, "ID")
            ' In Merging make all values to be null
            Dim row12 As DataRow = ds.Tables(ParentTable).NewRow()
            For i As Integer = ViewState("ParentRowsCount") + 1 To ds.Tables(ParentTable).Rows.Count
                For n As Integer = 1 To ds.Tables(ParentTable).Columns.Count - 1
                    ds.Tables(ParentTable).Columns(n).AllowDBNull = True
                    ds.Tables(ParentTable).Rows(i - 1).Item(n) = 0
                Next
                ds.AcceptChanges()
            Next

            Dim DataMap As DataRelation = ds.Relations.Add("Master" & ItrationCount, ds.Tables(ParentTable).Columns("ID"), ds.Tables(ChildTable).Columns("ID"))