我正在尝试使用查询工具,但我不知道如何为连接指定正确的参数。这是据我所知:
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,当涉及到左外连接时,您有三个选项:
使用泛型的左外连接
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 类型的参数,您可以通过将 .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,我是第一手知道的,因为我遇到了同样的问题。已经进行了重大更改,导致上述代码不再工作。为了让您在问题上更进一步,数据库中的每个表现在都有两个类;例如:“客户”和“客户表”。您会发现,如果您能弄清楚如何使用 DataProvider 实例化 CustomersTable 对象,您就可以引用列,它会以 IColumn 格式而不是字符串格式返回它们。祝你好运,本,在你尝试回答问题之前更新你的 SubSonic。