2009-10-14 4 views
2

Id нравится выполнять внешнее соединение со вторым оператором объединения в этом запросе, я продолжаю получать странные ошибки! (это должен быть третий RedBull)Внешнее соединение в LINQ Задача

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 
       }; 

Любая помощь будет оценена по достоинству.

[Edit] - Я забыл сказать, что я использую дозвуковых 3.0, ошибка, кажется, с SubSonic .....

+0

Вы должны сказать нам, что «странные ошибки» являются для того, чтобы мы могли помочь вам –

+0

вы можете предоставить образец с более чем одной joing, где только один из них является «внешним»? – hminaya

+0

Когда я это делаю, я получаю: «Выражение типа« System.Linq.IQueryable'1 [<> f__AnonymousType1'2 [<> f__AnonymousType0'2 [x, a], System.Collections.Generic.IEnumerable'1 [w ]]] 'не является последовательностью " – hminaya

ответ

4

Выполнение внешнего соединения состоит из двух шагов:

  1. Преобразовать объединение в групповое соединение с помощью into
  2. Используйте команду DefaultIfEmpty() в группе для генерации значения null, которое вы ожидаете, если объединенный набор результатов пуст.

Вам также необходимо добавить 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) 
       }; 
+0

Когда я это делаю, я получаю:« Выражение типа «System.Linq.IQueryable'1 [<> f__AnonymousType1'2 [<> f__AnonymousType0'2 [x, a], System. Collections.Generic.IEnumerable'1 [w]]] 'не является последовательностью " – hminaya

+0

Какой провайдер LINQ вы используете? Вы уверены, что поддерживает внешние соединения? – dahlbyk

+0

Я использую объекты LINQ 2 – hminaya

Смежные вопросы