2009-08-02 10 views
0

Ich versuche, das Abfrage-Tool zu verwenden, aber ich kann nicht herausfinden, wie Sie den richtigen Parameter für den Join angeben. Dies ist so weit wie ich:SubSonic 3.0.0.3 Wie verwenden wir Joins mit dem Abfrage-Tool?

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

nach Intellisense, Parameter vom Typ SubSonic.Schema.IColumn werden als nächstes erwartet. Wie gebe ich die richtigen Parameter ein?

Antwort

3

Sie würden die Spalten basierend auf den im Join enthaltenen Tabellen bereitstellen. Zum Beispiel, wenn Sie Tabelle Trans und Tabelle UserTrans auf TransId anschließen, Ihre Aussage etwas entlang der Linien der folgenden sein würde:

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

Nach dem SubSonic Simple Query Tool Docs, haben Sie drei Möglichkeiten, wenn es darum geht, nach links Outer Joins :

Mit Generics Registriert links außen

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

Mit Schema Registriert links außen
SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName")) 
     .From(Customer.Schema) 
     .LeftOuterJoin(Order.CustomerIDColumn, Customer.CustomerIDColumn); 

Left Outer Join mit magischem Strings

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

Es scheint, Sie favorisieren "Left Outer Join Mit Schema." Beachten Sie jedoch, dass jede der oben genannten Optionen eine SubSonic SqlQuery-Referenz zurückgibt. Ich bin mir nicht sicher, ob Sie das tun können, was Sie hoffen, eine Liste von Tran mit der LeftOuterJoin-Syntax zurückgeben. Vielleicht möchten Sie die Dokumente dazu weiter konsultieren.

UPDATE:

Per Ihren Kommentar, ich denke, wir Sie näher kommen können, was Sie wollen. Das .LeftOuterJoin-Objekt schließt Argumente des Typs TableSchema.TableColumn aus und Sie können eine allgemeine Liste erstellen, indem Sie .ExecuteTypedList <> an die Auswahl anhängen.

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

Danke für die Rückmeldung. Ich denke, ich war darüber bestürzt, dass meine Tabellenobjekte in 3.0.0.3 keine Schema-Eigenschaften haben und ich auch keine Spaltenreferenzen vom Typ IColumn finden kann. Ich finde die einzige Methode, die in Version 3 funktioniert, ist die, die Generics verwendet. Das Referenzdokument scheint sich nur vollständig auf Version 2 zu beziehen. Danke, dass Sie mich in die richtige Richtung weisen. – jcomet

+0

@jcomet - Bitte sehen Sie meine Aktualisierungen inline mit meiner Antwort. Viel Glück. –

+0

Danke nochmal Ben, du warst sehr hilfreich. Ich denke jedoch, dass Ihre Beispiele für 2. *, aber nicht für 3. * korrekt sind. Meine LeftOuterJoin-Argumenttypen sind SubSonic.Schema.IColumn. Vielleicht ist meine Konfiguration falsch. – jcomet

2

jcomet, Ihre Konfiguration ist nicht inkorrekt. Ben ist falsch: Sein Code funktioniert nur für 2.x und nicht 3.0.x, was ich aus erster Hand kenne, weil ich das gleiche Problem habe. Es wurden signifikante Änderungen vorgenommen, die dazu führen, dass der obige Code nicht mehr funktioniert. Um Ihnen bei Ihrem Problem einen Schritt voraus zu sein, hat jede Tabelle in Ihrer Datenbank jetzt zwei Klassen; ex: "Kunden" und "CustomersTable". Wenn Sie herausfinden können, wie Sie das CustomersTable-Objekt mit einem DataProvider instanziieren, können Sie Spalten referenzieren und sie im IColumn-Format und nicht im String-Format zurückgeben. Viel Glück, und Ben, aktualisieren Sie Ihre SubSonic, bevor Sie versuchen, Fragen zu beantworten.

Verwandte Themen