其问一下EF多表左连接异常问题

ufo20020427 2016-06-17 03:50:33

var query = (from record in dt
join packageDetail in db.T_Products_PackageDetail.DefaultIfEmpty() on record.F_PackageBarcode equals packageDetail.F_PackageBarcode
into joinPackageDetail
from packageDetail in joinPackageDetail.DefaultIfEmpty()
join package in db.T_Products_Package on packageDetail.F_PackageID equals package.F_ID
into joinPackage
from package in joinPackage.DefaultIfEmpty()
join archive in db.T_Products_Archive on package.F_ArchiveID equals archive.F_ID
into joinArchive
from archive in joinArchive.DefaultIfEmpty()

select new
{
F_PackageBarcode = (record == null ? "" : record.F_PackageBarcode),
F_ProductName = (archive == null ? "" : archive.F_Name), //产品名称
});


foreach (var row in query)
{
if (row == null || string.IsNullOrEmpty(row.F_ProductName))
{
sbError.AppendLine(string.Format("包裹条形码{0}在系统找不到对应商品", row.F_PackageBarcode.ToString()));
}
else
{
}




上面主要代码是实现 dt表作为主表,left join其他几个表。
但是当第一句,第一个表dt的F_PackageBarcode字段的值,在packageDetail找不到对应时,即
on record.F_PackageBarcode equals packageDetail.F_PackageBarcode 这一句连接不成功时。

执行foreach 就会出现null refer了。
但我上面已经用了left join,为何还会出现这个情况。
不知得如何实现,谢谢!
...全文
159 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufo20020427 2016-06-18
  • 打赏
  • 举报
回复
哪位知道吗,谢谢
圣殿骑士18 2016-06-18
  • 打赏
  • 举报
回复
我也写过左连接,没出现过这样的问题,我用EF6
ufo20020427 2016-06-18
  • 打赏
  • 举报
回复
on record.F_PackageBarcode equals packageDetail.F_PackageBarcode 左边的表存在的某一F_PackageBarcode ,在右边是不存在的。 我用左连接的目的,是要关联找出不存在的记录。 如果是用sql写,left join应该是可以查出来的。 但用了EF,我断点了下,当 packageDetail.F_PackageBarcode 没有对应数据时,在连接后面的表 join package in db.T_Products_Package on packageDetail.F_PackageID equals package.F_ID 就会异常了。
lshfong 2016-06-18
  • 打赏
  • 举报
回复
检查一下从数据库中取到数据没

110,538

社区成员

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

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

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