如何在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中对两个以上的表进行外部联接

听起来你想要一个左外部联接,这通常在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页面是一个很好的起点。