クエリ ツールを使用しようとしていますが、結合に正しいパラメーターを指定する方法がわかりません。これは私が得る限りです:
List<Tran> = new Select().From("Trans").LeftOuterJoin(
インテリセンスによると、SubSonic.Schema.IColumn型のパラメータが次に期待されます。正しいパラメータを指定するにはどうすればよいですか?
結合に含まれるテーブルに基づいて列を提供します。たとえば、TransId で Table Trans と Table 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);
マジック ストリングを使用した左外部結合
SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName"))
.From("Customers")
.LeftOuterJoin("Orders");
「スキーマとの左外部結合」を支持しているようです。ただし、上記の各オプションは SubSonic SqlQuery 参照を返すことに注意してください。LeftOuterJoin 構文を使用して、Tran のリストを返すという希望どおりにできるかどうかはわかりません。これについては、さらにドキュメントを参照してください。
アップデート:
あなたのコメントによると、私たちはあなたが望むものに近づけることができると思います. .LeftOuterJoin は、タイプ TableSchema.TableColumn の引数を除外し、select に .ExecuteTypedList<> を追加することで汎用リストを生成できます。
List<Tran> result = DB.Select()
.From<Trans>()
// parameters are of type TableSchema.TableColumn
.LeftOuterJoin(Trans.TransIDColumn, UserTrans.TransIDColumn);
.ExecuteTypedList<Tran>();
jcomet, あなたの設定は間違っていません. Ben は間違っています。彼のコードは 2.x でのみ機能し、3.0.x では機能しません。同じ問題を抱えているため、3.0.x は直接知っています。上記のコードが機能しなくなるような大幅な変更が行われました。問題をさらに一歩進めるために、データベースの各テーブルには 2 つのクラスがあります。例: 「Customers」および「CustomersTable」。CustomersTable オブジェクトを DataProvider でインスタンス化する方法を理解できれば、列を参照でき、文字列形式ではなく IColumn 形式で返されることがわかります。頑張ってください、そしてベン、質問に答えようとする前に SubSonic を更新してください。