Простой способ использовать значения внешнего ключа для сортировки?
Отказ от ответственности: я недавно перешел на C# 2008 и SubSonic 3 (3.0.0.4) одновременно. Я не использовал Linq для большинства вещей в прошлом.
Существует ли простой способ использовать отображаемое значение внешнего ключа для сортировки, а не идентификатор FK (который является числовым)?
Я добавил новый метод Find в свой ActiveRecord.tt, чтобы помочь с сортировкой по имени строкового поля, но после некоторого тестирования я понял, что, хотя он работает должным образом, я вообще не обрабатываю поля внешнего ключа (они просто сортируют по их стоимости).
Даже если мне нужно изменить способ доступа к данным, это достаточно рано для проекта. Просто ищу предложения.
2 ответа
LINQ - ваш друг в этой ситуации, вам просто нужно объединить два ваших объекта, а затем отсортировать по свойству от вашего постороннего объекта:
var primaryObjectsSorted =
from primaryObjects in PrimaryObject.All()
join foreignObjects in ForeignObject.All()
on primaryObjects.ForeignId equals foreignObjects.Id
orderby foreignObjects.PropertyYouWantToSortOn
select primaryObjects;
Таким образом, у вас есть таблица A, у которой идентификатор таблицы B является внешним ключом, и вы хотите отсортировать таблицу A по столбцу DisplayName таблицы B, а не по идентификатору таблицы B?
Единственный способ добиться этого - объединение.
SELECT tableA.* FROM tableA INNLER JOIN tableB ORDER BY tableB.DisplayName
В SubSonic2 вы можете сделать это и по-прежнему иметь возможность обновлять свои записи, если вы используете метод DB.Select(...).ExecuteCollection(). Я думаю, что это должно быть возможно и с subsonic3.
Однако, если вы не используете внешний ключ и отображаемое имя уникально, вы должны просто использовать это значение в качестве внешнего ключа.