Объединение результатов SQL с использованием LINQ - PullRequest
0 голосов
/ 04 апреля 2009

У меня есть база данных владельцев регистрации компании (для поиска / работы с каталогами). Мы добавили новую таблицу для хранения «расширенной» информации для владельцев регистрации, которые оплачивают эту функцию (например, реклама / дополнительные изображения / логотипы и т. Д.) Прямо сейчас новая таблица содержит только уникальный идентификатор регистрантов и несколько дополнительных полей (пути к изображениям и т. Д.). Пользователь может искать пользователей по определенным критериям, а расширенные списки должны отображаться в верхней части списка. Результаты не должны отображать регистрантов дважды (поэтому, если у пользователя есть расширенный список, он должен отображаться только в верхней области «расширенного списка»). Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 04 апреля 2009

Если вы используете LINQtoSQL и объекты, сгенерированные дизайнером, у вас должен быть набор объектов связанной информации о вашем владельце регистрации - при условии, что вы установили правильные отношения внешнего ключа. Если вы добавили это позже, вам может понадобиться добавить это вручную (см. Здесь) или удалить / повторно добавить ваши сущности в конструктор, чтобы они могли выбрать новые отношения. Тогда ваш запрос будет выглядеть примерно так:

var registrants = db.Registrants.Where( ... selection criteria here ... );

registrants = registrants.OrderByDescending( r => r.EnhancedData.Count() )
                         .ThenBy( r => r.Name );  // or normal sort order

Предположительно, счет будет 0 или 1, поэтому это должно поставить те с расширенными данными в верхней части вашего результата.

1 голос
/ 04 апреля 2009

Левое внешнее соединение от старой таблицы к новой таблице.

Добавить к вашему запросу "order by" ", когда new_table.id имеет значение null, а затем 1 else 0 end"

Так что, если у вас было это:

select foo, bar from old_table 
order by bar, foo;

У вас будет это:

select a.foo, a.bar from old_table a 
 left join new table b on (a.customer_id = b.customer_id) 
order by 
 case when new_table.customer_id is null then 1 else 0 end, 
 bar, foo;

Редактировать: я пропустил "left" из внешнего соединения в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...