c#中多个表的联合

本文关键字: | 更新日期: 2023-09-27 17:49:35

我正在使用c#,并试图在代码中对多个数据表进行联合。

Table 1
ID | Value | Value2
-----------------
1  | Tom   | Null
-----------------
2  | John  | Null
-----------------    
...
Table 2
ID | Value | Value2
-----------------
1  | Null  | Susie
-----------------
2  | Null  | Kim
-----------------    
...

结果表应该是

TableResult
ID | Value | Value2
-----------------
1  | Tom   | Susie
-----------------
2  | John  | Kim
-----------------    
...

有办法吗?

c#中多个表的联合

我不确定你在c#中使用的是什么数据结构,但你可以在你的数据库中这样做:

SELECT COALESCE(Table1.ID, Table2.ID) AS ID
    ,COALESCE(Table1.Value, Table2.Value) AS Value
    ,COALESCE(Table1.Value2, Table2.Value2) AS Value2
FROM Table1
FULL OUTER JOIN Table2
   ON Table1.ID = Table2.ID

我在这里选择了一个FULL OUTER JOIN,这样两边的项目都可以丢失(我通常期望大多数人在他们的职业生涯中大约每年使用一次FULL OUTER JOIN),以及一个任意的选择,总是选择表1中的值,如果它先存在,所以表2不会覆盖表1中的东西。

作为FOJ如何工作的一个例子:

Table 1
1,A,NULL
2,B,X
3,NULL,Y
4,D,Z
Table 2
1,NULL,P
2,NULL,Q
3,C,NULL
5,E,W
Output:
1,A,P
2,B,X
3,C,Y
4,D,Z
5,E,W

如果它们已经在datatable中,你可以将它们加载到另一个表中:

DataTable unionTable = new DataTable();
unionTable.Load(table1.CreateDataReader());
unionTable.Load(table2.CreateDataReader());

我认为前面提到的服务器端是更好的方法。

在Linq中有另一种方法

//假设你有两个表(从数据库中填充变量)IQueryable tab1 = new List().AsQueryable();IQueryable tab2 = new List().AsQueryable();

//你可以这样创建结果表var resultTable = tab1。Select(t1 => new Table1 {t1。ID、t1。价值,tab2。任意(t2 => t2)ID == t1.ID) ?tab2。首先(t2 => t2)ID == t1.ID)。

相关文章:
  • 没有找到相关文章