2009-07-16 7 views
2

Essayer de faire une jointure à gauche dans subsonic en utilisant linq mais cela ne semble pas fonctionner, j'ai une grosse erreur.Subsonic 3.0 Left Rejoindre

Je suis assez sûr que la requête est correcte car je l'ai fait quelques fois avec des objets et Linq2Sql. Il semble juste que Subsonic n'est pas capable de générer le SQL requis à partir des requêtes Linq de jointure à gauche.

Est-ce que je fais quelque chose de mal ici? Y at-il un travail autour?

Mise à jour: J'utilise 3.0.0.2 subsonique est l'erreur ici que je reçois quand je tente une jointure gauche avec subsonique

expression de type « System.Collections.Generic.IEnumerable 1[GetAQuote.Post]' cannot be used for parameter of type 'System.Linq.IQueryable 1 [GetAQuote.Post] 'de la méthode' System.Linq.IQueryable 1[<>f__AnonymousType2 2 [GetAQuote.Post, System.Collections.Generic.IEnumerable 1[GetAQuote.Quote]]] GroupJoin[Post,Quote,Int32,<>f__AnonymousType2 2] (System.Linq.IQueryable 1[GetAQuote.Post], System.Collections.Generic.IEnumerable 1 [GetAQuote.Quote], System.Linq.Expressions.Expression 1[System.Func 2 [ GetAQuote.Post, System.Int32]], System.Linq.Expressions.Expression 1[System.Func 2 [GetAQuote.Quote, System.Int32], System.Linq.Expressions.Expression 1[System.Func 3 [GetAQuote.Post, System.Collections.Generic. IEnumerable 1[GetAQuote.Quote],<>f__AnonymousType2 2 [GetAQuote.Post, System.Collections.Generic.IEnumerable`1 [GetAQuote.Quote]]]]) '

+0

Veuillez poster les détails de la grosse erreur que vous voyez. Aussi est-ce avec la version 3.0.0.2 –

+0

Oui J'utilise 3.0.0.2 J'ai mis à jour le message avec le message d'erreur. – Naz

+0

Quel modèle utilisez-vous? –

Répondre

4

J'ai une fourche pour la jointure gauche que je vais tirer dans les prochains jours - donne-moi une semaine et je vais pousser une autre version avec ça.

+0

Salut Rob une mise à jour lorsque cela est susceptible d'être résolu? – Naz

+0

J'ai aussi besoin de cela pour être corrigé. Il semble que ça ne marche toujours pas! Merci! – ullmark

1

Je pense que c'est un bug et ne sera pas supporté par Subsonic. J'ai eu le même problème en faisant d'autres choses here

0

t semble qu'il n'y a toujours pas de solution en place pour cela. Un correctif simple (quoique incorrect) consiste à créer une vue qui gère la jointure à gauche et remplit les données vides à partir de la droite avec les données par défaut et que SubSonic fasse une simple jointure sur cette vue. Je sais que c'est terrible mais c'est une solution pour l'instant. Je ne pouvais pas voir tomber SubSonic en raison de cette limitation. Je suis sûr que ce sera corrigé bientôt.

+0

10 mois plus tard ... essayant toujours de comprendre comment rejoindre à gauche dans Subsonic. Je suppose que je suis simplement obligé de faire un aller-retour à quelques reprises ... Boy SubSonic a vraiment été un net positif pour nos temps de développement .../sarcasme –

+0

J'ai arrêté d'utiliser Subsonic.Il semblait être marié à DAL (pas seulement à Subsonic) qui causait plus de maux de tête que la commodité allait me tuer. Je suis retourné à une approche simple de SQL et de Datatables avec l'ajout d'un gestionnaire datable-à-JSON qui m'a rendu beaucoup plus heureux. Bonne chance! – used2could

3

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:

 var post = from p in Post.All() 
        join q in Quote.All() on p.ID equals q.PostID into pq 
        where p.ID == id.Value 
        from qt in pq.DefaultIfEmpty() 
        select new {p, qt}; 

Rewrite à:

 var post = from p in Post.All() 
        from q in Quote.All().Where(x => x.PostID == p.ID).DefaultIfEmpty() 
        where p.ID == id.Value 
        select new {p, q}; 

Espérons que cela aide quelqu'un!