LINQ OrderBy Name ThenBy ChildrenCollection.Name

在LINQ中有没有办法做一个OrderBy,然后用ThenBy做一个ThenBy,使用父对象的子进行二次排序?

_repository.GetActiveDepartmentGroupsWithDepartments().OrderBy(c => c.DepartmentGroupName).ThenBy(c => c.Departments.OrderBy(d => d.DepartmentName)) 

在上面的例子中,c.Departments是一个EntityCollection。

顺便说一句:当我尝试上面的内容然后在其上执行ToList()时,我收到此错误:

 DbSortClause expressions must have a type that is order comparable. Parameter name: key 

在此先感谢任何帮助或指导。

您似乎正在尝试获取按组和部门名称排序的所有部门的列表。 如果是这样,那么你可能想做这样的事情:

 var res = from c in _repository.GetActiveDepartmentGroupsWithDepartments() from d in c.Departments orderby c.DepartmentGroupName, d.DepartmentName select d; 

或者在方法语法中:

 var res = _repository.GetActiveDepartmentGroupsWithDepartments() .SelectMany(c => c.Departments, (c,d) => new { c, d }) .OrderBy(x => xcDepartmentGroupName) .ThenBy(x => xdDepartmentName) .Select(x => xd); 

由于Deparment是一个集合,你必须将它转换为标量才能用于排序。

一种选择是在集合中选择单个实体,例如第一个部门的名称:

 _repository.GetActiveDepartmentGroupsWithDepartments() .OrderBy(c => c.DepartmentGroupName) .ThenBy(c => c.Departments .OrderBy(d => d.DepartmentName) .FirstOrDefault() .DepartmentName ) 

另一个选择是按集合本身的属性进行排序,例如部门数量:

 _repository.GetActiveDepartmentGroupsWithDepartments() .OrderBy(c => c.DepartmentGroupName) .ThenBy(c => c.Departments.Count())