LINQ问题中的外连接

时间:2009-10-14 04:31:16

标签: c# linq subsonic3

我想在此查询中使用第二个连接语句执行外连接,我不断遇到奇怪的错误! (它必须是第3个RedBull)

var Objeto = from t in Table1.All()
             join su in table2.All() on t.Id equals su.Id
             join tab2 in Table1.All() on t.PId equals tab2.Id //<-I want it here
             select new
             {
                 t.Field1,
                 SN = su.Field123,
                 PTN = tab2.FieldABC
              };

任何帮助都将不胜感激。

[编辑] - 我忽略了说我正在使用SubSonic 3.0,这个漏洞似乎与SubSonic有关......

1 个答案:

答案 0 :(得分:4)

执行外部联接需要两个步骤:

  1. 使用into
  2. 将联接转换为群组联接
  3. 如果联接的结果集为空,请在该组上使用DefaultIfEmpty()生成您期望的null值。
  4. 您还需要向null添加select项检查。

    var Objeto = from t in Table1.All()
                 join su in table2.All() on t.Id equals su.Id
                 join tab2 in Table1.All() on t.PId equals tab2.Id into gj
                 from j in gj.DefaultIfEmpty()
                 select new
                 {
                     t.Field1,
                     SN = su.Field123,
                     PTN = (j == null ? null : j.FieldABC)
                  };