2010-05-14 1 views
0

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

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

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

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

ответ

0

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

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

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

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

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

+0

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

1

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

Adam, Я работал с чем-то подобным прошлой ночью, моя проблема в том, что мое поле сортировки и порядок динамичны. Вот почему я разработал собственный метод поиска в activerecord.tt. Я думаю, что я мог бы сделать то же самое с кодом LINQ, но, думая больше об этом, я думаю, что мой дизайн БД может быть скорее проблемой, чем этой. Мой FK мог бы (как сказал SchlaWiener) поле отображения, которое также является уникальным в этом случае. Однако я уверен, что в какой-то момент я столкнусь с ситуацией, когда мне нужно больше, и LINQ, похоже, обрабатывает 99% того, что мне нужно. Мне нужно подумать об этом более тщательно, я верю. –

Смежные вопросы