linq join 两个表部分字段相同结果合并查询

比才 2017-07-14 02:25:16

我想查询CustomerAccountLogs里面的所有数据通过SendOrderId关联发货明细表的数据

from a in CustomerAccountLogs
join b in (
from s in SendOrders
join sd in SendOrderLines on s.Id equals sd.SendOrderId
select new
{
SendOrderId = sd.SendOrderId,
ProductName = sd.OrderLine.ProductName,
UnitName = sd.OrderLine.UnitName,
Price = sd.OrderLine.Price,
Amount = sd.OrderLine.Price * sd.OrderLine.Count
}
) on a.SendOrderId equals b.SendOrderId
where a.AccountId == 2
select new
{
a.SendOrderId,
a.OperationNumber,
a.OperationType,
b.ProductName,
b.UnitName,
b.Price,
b.Amount
}

这是目前查出来的结果 但是只查出来了 CustomerAccountLogs 表SendOrderId字段有值的数据 我想把SendOrderId字段等于空的也查出来显示在结果集里面 如何处理
这个是我目前的结果


最终要的效果是 下图
...全文
912 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
比才 2017-07-14
  • 打赏
  • 举报
回复
引用 5 楼 duanzi_peng 的回复:
[quote=引用 4 楼 u012458670 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:] join sd in SendOrderLines on s.Id equals sd.SendOrderId -》改为 join sd in SendOrderLines.DefaultIfEmpty() on s.Id equals sd.SendOrderId
你好 按照你的改了 查不来还是一样[/quote] 想把SendOrderId字段等于空的也查出来显示在结果集里面 -》那个表包含 这个“SendOrderId” 就作为 第一个表,也就是左表。类似,看着改吧, [/quote]
引用 5 楼 duanzi_peng 的回复:
[quote=引用 4 楼 u012458670 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:] join sd in SendOrderLines on s.Id equals sd.SendOrderId -》改为 join sd in SendOrderLines.DefaultIfEmpty() on s.Id equals sd.SendOrderId
你好 按照你的改了 查不来还是一样[/quote] 想把SendOrderId字段等于空的也查出来显示在结果集里面 -》那个表包含 这个“SendOrderId” 就作为 第一个表,也就是左表。类似,看着改吧, [/quote] 感谢 根据你的思路 改了一下可以了
  • 打赏
  • 举报
回复
引用 4 楼 u012458670 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:]
join sd in SendOrderLines on s.Id equals sd.SendOrderId
-》改为
join sd in SendOrderLines.DefaultIfEmpty() on s.Id equals sd.SendOrderId


你好 按照你的改了 查不来还是一样[/quote]
想把SendOrderId字段等于空的也查出来显示在结果集里面

-》那个表包含 这个“SendOrderId” 就作为 第一个表,也就是左表。类似,看着改吧,
比才 2017-07-14
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
join sd in SendOrderLines on s.Id equals sd.SendOrderId -》改为 join sd in SendOrderLines.DefaultIfEmpty() on s.Id equals sd.SendOrderId
你好 按照你的改了 查不来还是一样
  • 打赏
  • 举报
回复
DefaultIfEmpty 相当于sql的left outer join 已左表数据为基准。你根据需要改一下
  • 打赏
  • 举报
回复
join sd in SendOrderLines on s.Id equals sd.SendOrderId -》改为 join sd in SendOrderLines.DefaultIfEmpty() on s.Id equals sd.SendOrderId

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧