Простой способ использовать значения внешнего ключа для сортировки?

Отказ от ответственности: я недавно перешел на 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.

Однако, если вы не используете внешний ключ и отображаемое имя уникально, вы должны просто использовать это значение в качестве внешнего ключа.

Другие вопросы по тегам