сортировка по связанному полю в llblgen 2.6

Я унаследовал приложение, использующее 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));
    }

person John Landheer    schedule 28.06.2011    source источник


Ответы (1)


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

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

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

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

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

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

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

person Phil Sandler    schedule 28.06.2011