我需要帮助
我有两个名为 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/