不太确定如何措辞,但基本上我在列表中有一堆与此类似的数据:
人 1
姓名 - Joe Bloggs
年龄 - 40
部门 - IT
工资 - 20,000
人 2
姓名 - Jess Jane
年龄 - 40
部门 - 厨房
工资 - 16,000
……你懂的。
目前,我刚刚选择了所有人员,按工资对他们进行了排序,然后通过这样做非常简单地将他们输入到列表框中。
var item = (from employee in employeeList.employees
orderby employee.wage descending
select employee);
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是,我如何更改这段代码,以便它过滤列表并仅显示其部门中收入最高的员工?例如,它不会列出数百名员工,而是只显示 IT 部门收入最高的员工,然后是餐饮部门收入最高的员工,等等。
是否可以?如果没有,我可以使用其他任何方法来实现这一目标吗?
你可以尝试这样的事情:
var result = employeeList.employees.GroupBy(emp=>emp.Departemnt)
.Select(gr=> new
{
Departemnt = gr.Key,
Employee = gr.OrderByDescending(x=>x.wage)
.FirstOrDefault()
});
Run Code Online (Sandbox Code Playgroud)
我们上面做的是按部门分组,我们为每个部门挑选工资最高的员工。