我有以下代码,我得到了帮助。
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
};
它的作用是做一份工作报告,然后对每一条记录,它使用键查找状态和类型。此代码工作正常,但在某些情况下,j.Status和j.Type为null或未在引用表中设置为匹配值。
我是否有某种方式可以像外部联接一样思考?这样即使没有 匹配j.Status等于s.Key2或j.Type等于t.Key2然后我仍然可以看到结果。
答案 0 :(得分:1)
听起来你想要一个左外连接,这通常在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”应该会获得大量有关此内容的详细信息。 This MSDN page是一个非常好的起点。