首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中多表的联合

问C#中多表的联合
EN

Stack Overflow用户
提问于 2011-04-09 02:27:19
回答 3查看 329关注 0票数 2

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

代码语言:javascript
复制
Table 1

ID | Value | Value2
-----------------
1  | Tom   | Null
-----------------
2  | John  | Null
-----------------    
...

Table 2

ID | Value | Value2
-----------------
1  | Null  | Susie
-----------------
2  | Null  | Kim
-----------------    
...

并且,我希望结果表如下所示

代码语言:javascript
复制
TableResult

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

有没有办法让我这么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-09 02:31:42

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

代码语言:javascript
复制
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

我在这里选择了一个完整的外连接,这样任何一方都可能缺少项(我一般认为大多数人在他们的职业生涯中大约一年都会使用一个完整的外连接),也可以随意选择始终选取Table1中的值(如果它首先存在),这样Table2就不会覆盖Table1中的某些东西。

因此,作为FOJ如何工作的示例:

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2011-04-09 02:34:52

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

代码语言:javascript
复制
DataTable unionTable = new DataTable();
unionTable.Load(table1.CreateDataReader());
unionTable.Load(table2.CreateDataReader());

我认为前面提到的在服务器端做这件事的想法是一个更好的方法……

票数 0
EN

Stack Overflow用户

发布于 2011-04-09 02:41:40

在Linq中实现这一点的另一种方法

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

//您可以这样创建结果表var resultTable = tab1.Select(t1 => new Table1 { t1.ID,t1.Value,tab2.Any(t2 => t2.ID == t1.ID)?)tab2.First(t2 => t2.ID == t1.ID).Value : null });

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5599292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档