如何在LINQ中对两个以上的表进行外部联接
本文关键字:外部 两个 LINQ | 更新日期: 2023-09-27 18:21:15
我得到了以下代码的帮助。
var results =
from j in table.GetAll()
join s in refTableStatuses.GetAll() on j.Status equals s.Key2
join t in refTableTypes.GetAll() on j.Type equals t.Key2
select new Job
{
Key1 = j.Key1,
Key2 = j.Key2,
Title = j.Title,
Status = s.Title, // value from Ref (Status) s
Type = t.Title // value from Ref (Type) t
};
它所做的是做一份作业报告,然后使用键查找每个记录的"状态"answers"类型"。此代码运行良好,但在某些情况下,j.Status和j.Type为null或在引用表中未设置为匹配值。
有没有什么办法可以让我做一些事情,比如外接?即使没有匹配j。状态等于s.Key2或j。类型等于t.Key2,那么我仍然可以看到结果。
听起来你想要一个左外部联接,这通常在LINQ中完成,如下所示:
var results =
from j in table.GetAll()
join s in refTableStatuses.GetAll() on j.Status equals s.Key2
into statuses
from s in statuses.DefaultIfEmpty()
join t in refTableTypes.GetAll() on j.Type equals t.Key2
into types
from t in types
select new Job
{
Key1 = j.Key1,
Key2 = j.Key2,
Title = j.Title,
Status = s == null ? null : s.Title, // value from Ref (Status) s
Type = t == null ? null : t.Title // value from Ref (Type) t
};
搜索"左外部联接LINQ"应该会得到很多关于这方面的详细信息。这个MSDN页面是一个很好的起点。