SubSonic 3.0.0.3 Как мы используем объединения с инструментом запросов? - PullRequest
0 голосов
/ 03 августа 2009

Я пытаюсь использовать инструмент запросов, но не могу понять, как указать правильный параметр для соединения. Это насколько я понимаю:

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

в соответствии с intellisense, ожидаются параметры типа SubSonic.Schema.IColumn . Как мне указать правильные параметры?

Ответы [ 2 ]

3 голосов
/ 03 августа 2009

Вы должны предоставить столбцы на основе таблиц, включенных в объединение. Например, если вы присоединяетесь к Таблице Trans и Таблице UserTrans в TransId, ваша инструкция будет выглядеть примерно так:

SubSonic.SqlQuery query = DB.Select()
    .From(Trans.Schema)
    .LeftOuterJoin(Trans.TransIDColumn, UserTrans.TransIDColumn);

В соответствии с документами SubSonic Simple Query Tool у вас есть три варианта, когда речь идет о левом внешнем объединении:

левое внешнее соединение с родовыми элементами

    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. Я не уверен, что вы можете сделать, как вы надеетесь, вернуть список Tran с синтаксисом LeftOuterJoin. Вы можете обратиться к документации по этому вопросу.

UPDATE:

На ваш комментарий, я думаю, мы сможем приблизить вас к тому, что вы хотите. .LeftOuterJoin исключает аргументы типа TableSchema.TableColumn, и вы можете создать общий список, добавив .ExecuteTypedList <> к выбору.

List<Tran> result = DB.Select()
    .From<Trans>()
    // parameters are of type TableSchema.TableColumn
    .LeftOuterJoin(Trans.TransIDColumn, UserTrans.TransIDColumn);
    .ExecuteTypedList<Tran>();
2 голосов
/ 10 августа 2009

jcomet, ваша конфигурация неверна. Бен не прав: его код работает только для 2.x, а не 3.0.x, что я знаю из первых рук, потому что у меня та же проблема. Внесены существенные изменения, из-за которых приведенный выше код больше не работает. Чтобы сделать еще один шаг вперед в решении вашей проблемы, у каждой таблицы в вашей базе данных теперь есть два класса; например: «Клиенты» и «Клиенты». Вы обнаружите, что если вы можете выяснить, как создать экземпляр объекта CustomersTable с помощью DataProvider, вы можете ссылаться на столбцы, и он возвращает их в формате IColumn, а не в формате строки. Удачи, и Бен, обнови свой SubSonic, прежде чем пытаться отвечать на вопросы.

...