我正在使用 ASP.NET 3.5、LLBLGenPro 3.0 和 DevExpress 10.1.7。我有一个带有 LinqServerModeDataSource 的 ASPxGridView。ASPxGridView 的每一行对应一个来自 LLBLGenPro 的 TaskEntity。TaskEntity 的属性之一是 OrganizationCollection,它是相关组织实体的集合。我想做的是向 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()
单独定义方法,该方法采用任务 ID 并以我想要的格式构建列表,并将其作为字符串返回。这实际上确实以我想要的方式显示了网格中的数据,但缺点是当您尝试对此列进行排序时,它无法正常工作,并且当您尝试使用 AutoFilter 过滤此列时,它只是过滤一切都出来了,不管。另外,我想它对数据库的访问次数超出了必要的数倍。
有什么办法可以使它与完整的排序和过滤一起工作?或者我需要为此专栏禁用这些功能吗?