2009-10-14 8 views
1

Il semble y avoir un bug avec la déclaration de jointure externe dans SubSonic 3, ou peut-être que c'est juste mon ignorance, mais les craps suivants sur:SubSonic OUTER JOIN

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

Avec:

The expression of type 'System.Linq.IQueryable` xxxx is not a sequence 
+0

Si je supprime la jointure externe cela fonctionne parfaitement ..... – hminaya

Répondre

0

Ils avaient déjà des problèmes avec IQueryable:

Blog Entry

Juste pour votre information ...

+0

mec, ceci est un commentaire, pas une réponse;) – sebagomez

+0

ouais vrai ... je suis toujours à la recherche d'une solution. Donc le Blog Entry est un bon point de départ ... – bastianneu

+0

Je n'ai pas encore trouvé de solution à cela ... – hminaya

1

Ravivant un ancien sujet ici, mais pour ceux qui viennent chercher plus tard, il existe une syntaxe différente qui semble fonctionner correctement dans SubSonic3 pour une jointure externe gauche.

Au lieu de l'expression Linq du message original qui fait un join ... into ... Rewrite à:

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

La partie clé étant: from j in Table1.All().Where(x => x.Id == t.PId).DefaultIfEmpty() qui fera la jointure externe, au lieu de la join ... into traditionnelle

Espérons que cela aide!