сортировка по смежному полю в llblgen 2.6 - PullRequest
2 голосов
/ 28 июня 2011

Я унаследовал приложение, которое использует llblgen 2.6.У меня есть сущность PersonAppointmentType, которая имеет свойство AppointmentType (отношение n: 1).Теперь я хочу отсортировать коллекцию PersonAppointmentTypes по имени AppointmentType.Я пробовал это до сих пор в Page_Load:

    if (!Page.IsPostBack)
    {
        var p = new PrefetchPath(EntityType.PersonAppointmentTypeEntity);
        p.Add(PersonAppointmentTypeEntity.PrefetchPathAppointmentType);

        dsItems.PrefetchPathToUse = p;
        // dsItems.SorterToUse = new SortExpression(new SortClause(PersonAppointmentTypeFields.StartDate, SortOperator.Ascending));  // This works
        dsItems.SorterToUse = new SortExpression(new SortClause(AppointmentTypeFields.Name, SortOperator.Ascending));
    }

Возможно, я просто не понимаю.

РЕДАКТИРОВАТЬ: Фил поставил меня на правильный путьработы:

    if (!Page.IsPostBack)
    {
        dsItems.RelationsToUse = new RelationCollection(PersonAppointmentTypeEntity.Relations.AppointmentTypeEntityUsingAppointmentTypeId);
        dsItems.SorterToUse = new SortExpression(new SortClause(AppointmentTypeFields.Name, SortOperator.Ascending));
    }

1 Ответ

3 голосов
/ 28 июня 2011

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

У вас есть путь предварительной выборки от PersonAppointmentType (PAT) до AppointType (AT). Это в основном говорит каркасу о необходимости выбирать PAT как один запрос, а затем, после того, как этот запрос завершен, выбирать AT на основе результатов запроса PAT. LLBLGen позаботится обо всем этом для вас и соединит объекты вместе, как только запросы будут завершены.

То, что вы пытаетесь сделать, это отсортировать первый запрос по сущности, которую вы выбираете во втором запросе. Если вы думаете в терминах SQL, вам нужно соединение из PAT => AT в первом запросе. Для этого вам нужно добавить отношение (соединение) через RelationPredicateBucket и передать его как часть вызова извлечения.

Поначалу это может показаться нелогичным, но отношения и пути предварительной выборки совершенно не связаны (хотя вы можете использовать их вместе). Возможно, вам даже не понадобится путь предварительной выборки; Может случиться так, что вам ТОЛЬКО нужно, чтобы в ваш код выборки было добавлено выражение отношения и сортировки (в зависимости от того, хотите ли вы на самом деле AT Entity на вашем графике, а не возможность сортировки по его полям).

Существует очень хорошее объяснение путей предварительной выборки и того, как они были здесь:

http://www.llblgening.com/archive/2009/10/prefetchpaths-in-depth/

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

...