SubSonic 3.0.0.3我们如何使用查询工具的连接?

时间:2009-08-02 23:18:26

标签: subsonic subsonic3

我正在尝试使用查询工具,但我无法弄清楚如何为连接指定正确的参数。这是我得到的:

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

根据intellisense,接下来需要 SubSonic.Schema.IColumn 类型的参数。如何提供正确的参数?

2 个答案:

答案 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。