0

我正在尝试使用查询工具,但我不知道如何为连接指定正确的参数。这是据我所知:

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

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

4

2 回答 2

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);

带有魔术字符串的左外连接

   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>();
于 2009-08-03T04:48:11.110 回答
2

jcomet,您的配置不正确。Ben 错了:他的代码只适用于 2.x 而不是 3.0.x,我是第一手知道的,因为我遇到了同样的问题。已经进行了重大更改,导致上述代码不再工作。为了让您在问题上更进一步,数据库中的每个表现在都有两个类;例如:“客户”和“客户表”。您会发现,如果您能弄清楚如何使用 DataProvider 实例化 CustomersTable 对象,您就可以引用列,它会以 IColumn 格式而不是字符串格式返回它们。祝你好运,本,在你尝试回答问题之前更新你的 SubSonic。

于 2009-08-10T13:41:51.760 回答