2009-08-02 10 views
0

私はクエリツールを使用しようとしていますが、結合の正しいパラメータを指定する方法がわかりません。これは私が得る限りです:SubSonic 3.0.0.3クエリツールでどのようにジョインを使用しますか?

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

インテリセンスによると、タイプSubSonic.Schema.IColumnのパラメータは次の期待されています。正しいパラメータをどのように提供するのですか?

答えて

3

ジョインに含まれるテーブルに基づいて列を提供します。たとえば、あなたがTRANSIDの表トランスおよび表UserTransに参加している場合は、あなたの文は次の線に沿って何かのようになります。

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

SubSonic Simple Query Tool Docsによると、それは左外部結合に来るとき、あなたは3つのオプションを持っています:

左外側

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

左外側

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

で参加ジェネリックで参加

LEFT OUTERは、あなたが好むされ表示されます魔法の文字列を

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

に参加し、 "LEFT OUTERは、スキーマを持つ参加します。"ただし、上記の各オプションは、SubSonic SqlQueryリファレンスを返すことに注意してください。私はあなたが望むように、LeftOuterJoin構文でTranのListを返すことができるかどうかはわかりません。これについてのドキュメントをさらに参照することをお勧めします。

UPDATE:あなたのコメントパー

、私たちは近いあなたが望むものにあなたを得ることができると思います。 .LeftOuterJoinは、TableSchema.TableColumn型の引数を除いて、.ExecuteTypedList <>をselectに追加することでジェネリックリストになります。

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

フィードバックいただきありがとうございます。私はテーブルオブジェクトに3.0.0.3でスキーマプロパティがなく、IColumnタイプのカラム参照を見つけることができないという事実に困惑していたと思います。私はバージョン3で動作する唯一の方法はジェネリックスを使用する方法だとわかります。参考文献はバージョン2に完全に関連しているようです。正しい方向に私を指摘してくれてありがとう。 – jcomet

+0

@jcomet - 私の答えをインラインでご覧ください。がんばろう。 –

+0

もう一度おかげさまで、あなたはとても助けになりました。私は、あなたの例は2. *のために正しいと思っていますが、3. *のためではありません。私のLeftOuterJoin引数型はSubSonic.Schema.IColumnです。私の設定が間違っているかもしれません。 – jcomet

2

jcomet、設定が間違っていません。ベンは間違っています:彼のコードは、同じ問題を抱えているため私が最初に知っている2.xではなく3.0.xでしか動作しません。上記のコードがもう動作しなくなる大きな変更が行われました。問題を一歩先に進めるために、データベースの各テーブルには2つのクラスがあります。例: "Customers"と "CustomersTable"。 DataProviderを使用してCustomersTableオブジェクトをインスタンス化する方法を理解できれば、列を参照することができ、文字列形式ではなくIColumn形式で返すことができます。幸運、ベン、あなたの質問に答える前にあなたの亜音速を更新してください。

関連する問題