c# - LINQ 左连接和右连接

标签 c# linq-to-sql

我需要帮助

我有两个名为 A 和 B 的数据表,我需要 A 中的所有行和 B 的匹配行

例如:

A:                                           B:

User | age| Data                            ID  | age|Growth                                
1    |2   |43.5                             1   |2   |46.5
2    |3   |44.5                             1   |5   |49.5
3    |4   |45.6                             1   |6   |48.5

我需要输出:

User | age| Data |Growth
------------------------                           
1    |2   |43.5  |46.5                           
2    |3   |44.5  |                          
3    |4   |45.6  |

最佳答案

您提供的示例数据和输出未演示左连接。如果是左连接,您的输出将如下所示(请注意我们如何为用户 1 提供 3 个结果,即用户 1 拥有的每个增长记录一次):

User | age| Data |Growth
------------------------                           
1    |2   |43.5  |46.5                           
1    |2   |43.5  |49.5     
1    |2   |43.5  |48.5     
2    |3   |44.5  |                          
3    |4   |45.6  |

假设您仍然需要左连接;以下是在 Linq 中执行左连接的方法:

var results = from data in userData
              join growth in userGrowth
              on data.User equals growth.User into joined
              from j in joined.DefaultIfEmpty()
              select new 
              {
                  UserData = data,
                  UserGrowth = j
              };

如果您想进行右连接,只需交换您从中选择的表,如下所示:

var results = from growth in userGrowth
              join data in userData
              on growth.User equals data.User into joined
              from j in joined.DefaultIfEmpty()
              select new 
              {
                  UserData = j,
                  UserGrowth = growth
              };

代码的重要部分是 into 语句,后面是 DefaultIfEmpty 。这告诉 Linq,如果另一个表中没有匹配结果,我们希望使用默认值(即 null)。

关于c# - LINQ 左连接和右连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4497086/

相关文章:

c# - linq 从 ArrayList 解析整数

c# - 带有 HiddenField 的中继器

c# - 可空 xml 列的 Linq to sql 错误 "Data at the root level is invalid "

c# - 如何知道 Linq To SQL 中的字段是否为数字

c# - LinqToSql 中的子查询是否保证与其父查询的顺序相同?

c# - 理解以下 lambda

c# - c#解析Json数据转xml

C# 和 ASP.NET 自定义属性特性并确定属性是否已更改

c# - 解决 ASP.NET MVC View 中的 "DataContext accessed after Dispose"错误

c# - 简单选择上的 LINQ NullReferenceException