Я использую ASP.NET 3.5, LLBLGenPro 3.0 и DevExpress 10.1.7. У меня есть ASPxGridView с LinqServerModeDataSource. Каждая строка ASPxGridView соответствует TaskEntity из LLBLGenPro. Одним из свойств TaskEntity является OrganizationCollection, представляющее собой набор связанных объектов OrganizationEntities. Что я хотел бы сделать, так это добавить столбец в ASPxGridView с именем OrgList, который будет отображать список связанных организаций по имени (в идеале в списке с разделителями <br>
, поэтому каждый элемент будет в своей собственной строке, но список будет быть все в одной и той же ячейке, которая работает, если для свойства EncodeHtml столбца установлено значение «False»).
В настоящее время у меня есть событие lsmdsTasks_Selecting() (это упрощенный пример):
IQueryable<TaskEntity> taskQuery;
taskQuery = TaskQueryStore.GetTasks(...);
var query = from task in taskQuery
select new
{
task.Id,
task.TaskName,
OrgList = ???
}
e.KeyExpression = "Id";
e.QueryableSource = query;
До сих пор я пробовал несколько вещей для «???» со следующими результатами:
Сначала я попробовал:
OrgList = task.OrganizationCollection.Aggregate("", (acc, item) => (acc == "" ? "" : acc + "<br>") + item.OrgName)
Это дало мне следующее исключение ORMException: «Агрегат» не поддерживается в этом провайдере Linq. Попробуйте переписать запрос, используя поддерживаемые методы».
Затем я попытался:
OrgList = String.Join("<br>", task.OrganizationCollection.Select(x => x.OrgName).ToArray())
Это дало мне следующее исключение ORMException: «Вызов метода «Join» не имеет известной сопоставленной функции базы данных или другого известного обработчика».
Единственное, что сработало, это:
OrgList = GetOrgList(task.Id)
а затем отдельно определить метод GetOrgList()
, который берет идентификатор задачи и создает список в нужном мне формате и возвращает его в виде строки. На самом деле это отображало данные в сетке так, как я этого хочу, но недостатком было то, что когда вы пытаетесь отсортировать этот столбец, он работает неправильно, и когда вы пытаетесь отфильтровать этот столбец с помощью автофильтра, он просто фильтрует все вне зависимости от того. Кроме того, я полагаю, что он обращается к базе данных в несколько раз больше, чем необходимо.
Есть ли способ заставить это работать с сортировкой и фильтрацией без изменений? Или мне нужно будет отключить эти функции для этого столбца?