我正在尝试使用查询工具,但我无法弄清楚如何为连接指定正确的参数。这是我得到的:
List<Tran> = new Select().From("Trans").LeftOuterJoin(
根据intellisense,接下来需要 SubSonic.Schema.IColumn 类型的参数。如何提供正确的参数?
答案 0 :(得分:3)
您可以根据联接中包含的表提供列。例如,如果您要在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);
使用Magic Strings左外连接
SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName"))
.From("Customers")
.LeftOuterJoin("Orders");
看来你赞成“左外连接架构”。但请注意,上面的每个选项都返回SubSonic SqlQuery引用。我不确定你能做到如你所愿,使用LeftOuterJoin语法返回Tran列表。您可能希望进一步咨询相关文档。
更新:
根据您的评论,我认为我们可以让您更接近您想要的。 .LeftOuterJoin除了TableSchema.TableColumn类型的参数外,您可以通过附加.ExecuteTypedList&lt;&gt;来生成通用列表。选择。
List<Tran> result = DB.Select()
.From<Trans>()
// parameters are of type TableSchema.TableColumn
.LeftOuterJoin(Trans.TransIDColumn, UserTrans.TransIDColumn);
.ExecuteTypedList<Tran>();
答案 1 :(得分:2)
jcomet,您的配置不正确。 Ben是错的:他的代码仅适用于2.x而不是3.0.x,我知道这是第一手因为我遇到了同样的问题。已经进行了重大改变,导致上述代码不再起作用。为了让您在问题上再领先一步,数据库中的每个表现在都有两个类;例如:“客户”和“客户表”。您会发现,如果您可以弄清楚如何使用DataProvider实例化CustomersTable对象,您可以引用列,并以IColumn格式而不是字符串格式返回它们。祝你好运,Ben在你试图回答问题之前更新你的SubSonic。