2009-08-02 9 views
0

J'essaie d'utiliser l'outil de requête, mais je n'arrive pas à comprendre comment spécifier le bon paremètre pour la jointure. Ceci est aussi loin que je reçois:SubSonic 3.0.0.3 Comment utiliser les jointures avec l'outil de requête?

List<Tran> = new Select().From("Trans").LeftOuterJoin(

selon IntelliSense, les paramètres de type SubSonic.Schema.IColumn sont attendus à côté. Comment puis-je fournir les paramètres corrects?

Répondre

3

Vous devez fournir les colonnes en fonction des tables incluses dans la jointure. Par exemple, si vous adhérez Tableau Trans et table UserTrans sur TransId, votre déclaration serait quelque chose le long des lignes de ce qui suit:

SubSonic.SqlQuery query = DB.Select() 
    .From(Trans.Schema) 
    .LeftOuterJoin(Trans.TransIDColumn, UserTrans.TransIDColumn); 

Selon le SubSonic Simple Query Tool Docs, vous disposez de trois options en matière de gauche des jointures externes :

gauche jointure externe avec Generics

SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName")) 
     .From<Customer>() 
     .LeftOuterJoin<Order>(); 

gauche jointure externe avec le schéma

SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName")) 
     .From(Customer.Schema) 
     .LeftOuterJoin(Order.CustomerIDColumn, Customer.CustomerIDColumn); 

gauche jointure externe avec cordes magiques

SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName")) 
     .From("Customers") 
     .LeftOuterJoin("Orders"); 

Il semble que vous favorisez « jointure externe gauche avec le schéma. » Notez cependant que chacune des options ci-dessus renvoie une référence SubSonic SqlQuery. Je ne suis pas sûr que vous pouvez faire comme vous l'espérez, retourner une liste de Tran, avec la syntaxe LeftOuterJoin. Vous pouvez consulter les documents à ce sujet.

MISE À JOUR:

par votre commentaire, je pense que nous pouvons vous rapprocher de ce que vous voulez. Le .LeftOuterJoin excepts arguements de type TableSchema.TableColumn et vous pouvez entraîner une liste générique en ajoutant .ExecuteTypedList <> à la sélection.

List<Tran> result = DB.Select() 
    .From<Trans>() 
    // parameters are of type TableSchema.TableColumn 
    .LeftOuterJoin(Trans.TransIDColumn, UserTrans.TransIDColumn); 
    .ExecuteTypedList<Tran>(); 
+0

Merci pour vos commentaires. Je suppose que je étais perplexe par le fait que mes objets de tables n'ont pas de propriétés de schéma dans la version 3.0.0.3, ni je peux trouver des références de colonne de type IColumn. Je trouve que la seule méthode qui fonctionne dans la version 3 est celle qui utilise Generics. Le document de référence semble ne concerner que la version 2. Merci de m'avoir indiqué la bonne direction. – jcomet

+0

@jcomet - S'il vous plaît voir mes mises à jour en ligne avec ma réponse. Bonne chance. –

+0

Merci encore Ben, vous avez été très utile. Je pense, cependant, que vos exemples sont corrects pour 2. *, mais pas pour 3. *. Mes types d'arguments LeftOuterJoin sont SubSonic.Schema.IColumn. Peut-être que ma configuration est incorrecte. – jcomet

2

jcomet, Votre configuration n'est pas incorrecte. Ben a tort: ​​son code ne fonctionne que pour 2.x et pas pour 3.0.x, que je connais de première main parce que j'ai le même problème. Des changements significatifs ont été faits qui font que le code ci-dessus ne fonctionne plus. Pour vous donner une longueur d'avance dans votre problème, chaque table de votre base de données a maintenant deux classes; ex: "Customers" et "CustomersTable". Vous constaterez que si vous pouvez comprendre comment instancier l'objet CustomersTable avec un DataProvider, vous pouvez référencer des colonnes et les retourner au format IColumn et non au format de chaîne. Bonne chance, et Ben, mettez à jour votre SubSonic avant d'essayer de répondre aux questions.

Questions connexes