Внешние соединения с Subsonic 3.0 - PullRequest
2 голосов
/ 07 августа 2009

Кто-нибудь знает способ сделать левое внешнее объединение с SubSonic 3.0 или другой способ решения этой проблемы? Я пытаюсь добиться того, чтобы у меня была одна таблица для отделов и другая таблица для подразделений. Отдел может иметь несколько отделов. Мне нужно отобразить список отделов с отделами, которые он содержит. Возвращение коллекции отделов, каждое из которых содержит коллекцию подразделений, было бы идеальным, но я бы также взял уплощенную таблицу результатов.

Использование синтаксиса LINQ, похоже, нарушено (хотя я новичок в LINQ и могу использовать его неправильно), например, это вызывает ошибку ArgumentException:

var allDepartments = from div in Division.All()
    join dept in Department.All() on div.DepartmentId equals dept.Id into divdept
    select divdept;

Итак, я подумал, что могу вернуться к использованию синтаксиса запросов SubSonic. Однако этот код генерирует ВНУТРЕННЕЕ СОЕДИНЕНИЕ вместо ВНЕШНЕГО СОЕДИНЕНИЯ:

List<Department> allDepartments = new Select()
    .From<Department>()
    .LeftOuterJoin<Division>(DepartmentsTable.IdColumn, DivisionsTable.DepartmentIdColumn)
    .ExecuteTypedList<Department>();

Любая помощь будет оценена. Мне не очень повезло с SubSonic 3. Мне очень понравилось использовать SubSonic 2, и я могу вернуться к этому, если я не могу понять что-то столь же простое, как левое соединение.

1 Ответ

2 голосов
/ 07 августа 2009

Идеально было бы вернуть коллекцию отделов, каждый из которых содержит набор отделов

SubSonic сделает это за вас (если вы правильно настроили свои отношения в базе данных), просто выберите все Departments:

var depts = Model.Department.All();

В каждом элементе depts будет указано свойство Divisions, которое содержит коллекцию Division объектов.

...