如何在LINQ中对两个以上的表进行外连接?

时间:2012-01-22 12:38:08

标签: c# linq

我有以下代码,我得到了帮助。

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然后我仍然可以看到结果。

1 个答案:

答案 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是一个非常好的起点。