我有一组员工,每个员工都有一系列职责。我想输出按名称排序的员工列表,并输出他们的职责,按标题排序。
所以,它应该像这样输出:
Jane Jones
职责:
责任A
责任B
迈克史密斯职责:
责任A
责任C
要获得我使用的初始集合:
var employees = _context.Employees.OrderBy(e => e.Name);
但我似乎无法弄清楚如何订购责任子集。
我正在使用MVC,我的View收到一个强类型的Employee集合,因此我不想构建并返回匿名类型。
答案 0 :(得分:4)
您可以执行以下操作:
var employees = _context.Employees.OrderBy(e => e.Name);
employees.ToList().ForEach(e => e.Responsibilities = e.Responsibilities.OrderBy(r => r.Name));
答案 1 :(得分:3)
第一种方法:(仅适用于LINQ到责任定义为IList的对象)
您可以复制到新的员工集合中,但这意味着您需要将每个字段重新复制到新员工中,如下所示:
var employees = from e in _context.Employees
orderby e.Name
select new Employee
{
Name = e.Name,
...re-assign other properties...
Responsibilities = e.Responsibilities.OrderBy(r => r.Name).ToList()
};
第二种方法:
使用DataLoadOptions。基本上,您创建一个DataLoadOptions对象,该对象指定如何订购特定关系,因此在您的情况下:
var options = new DataLoadOptions();
options.AssociateWith<Employees>(e => e.Responsibilities.OrderBy(r => r.Name));
_context.LoadOptions = options;
var employees = _context.Employees.OrderBy(e => e.Name);
责任将自动订购。