Простой способ использовать значения внешнего ключа для сортировки? - PullRequest
0 голосов
/ 14 мая 2010

Отказ от ответственности: я недавно перешел на C # 2008 и SubSonic 3 (3.0.0.4) одновременно. Я не использовал Linq для большинства вещей в прошлом.

Существует ли простой способ использовать отображаемое значение внешнего ключа для сортировки, а не идентификатор FK (который является числовым)?

Я добавил новый метод Find в свой ActiveRecord.tt, чтобы помочь с сортировкой по имени строкового поля, но после некоторого тестирования я понял, что хотя он работает должным образом, я не обрабатываю поля внешнего ключа вообще (они просто сортируют по значению).

Даже если мне нужно изменить способ доступа к данным, это достаточно рано для проекта. Просто ищу предложения.

Ответы [ 2 ]

1 голос
/ 14 мая 2010

LINQ - ваш друг в этой ситуации, вам просто нужно объединить два ваших объекта, а затем отсортировать по свойству от вашего постороннего объекта:

var primaryObjectsSorted =
  from primaryObjects in PrimaryObject.All()
  join foreignObjects in ForeignObject.All() 
    on primaryObjects.ForeignId equals foreignObjects.Id
  orderby foreignObjects.PropertyYouWantToSortOn
  select primaryObjects;
0 голосов
/ 14 мая 2010

Итак, у вас есть таблица A, у которой идентификатор таблицы B является внешним ключом, и вы хотите отсортировать таблицу A по столбцу DisplayName таблицы B, а не по идентификатору таблицы B?

Единственный способ добиться этого - объединение.

SELECT tableA.* FROM tableA INNLER JOIN tableB ORDER BY tableB.DisplayName

В SubSonic2 вы можете сделать это и по-прежнему иметь возможность обновлять свои записи, если используете метод DB.Select (...). ExecuteCollection (). Я думаю, что это возможно и с subsonic3.

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

...