Linq查询返回前两个结果时出现一些冲突,是否不起作用?
我试着做一件简单的事情,组成一个员工集合,我想把前两名最大的员工名单拿出来。但请记住,可以有多个员工拥有相同的工资,所以如果他们的工资在最高两个工资范围内,我希望他们都是。以下是我正在使用的收藏:Linq查询返回前两个结果时出现一些冲突,是否不起作用?,linq,lambda,Linq,Lambda,我试着做一件简单的事情,组成一个员工集合,我想把前两名最大的员工名单拿出来。但请记住,可以有多个员工拥有相同的工资,所以如果他们的工资在最高两个工资范围内,我希望他们都是。以下是我正在使用的收藏: List<Employee> Employees = new List<Employee> { new Employee {EmployeeID = 1,EmployeeName ="A", Department ="D
List<Employee> Employees = new List<Employee>
{
new Employee {EmployeeID = 1,EmployeeName ="A", Department ="Dept1", Salary = 10000 },
new Employee {EmployeeID = 5,EmployeeName ="A1", Department ="Dept2", Salary = 12000 },
new Employee {EmployeeID = 2,EmployeeName ="B", Department ="Dept1", Salary = 20000 },
new Employee {EmployeeID = 3,EmployeeName ="C", Department ="Dept1", Salary = 20000 },
new Employee {EmployeeID = 6,EmployeeName ="B1", Department ="Dept2", Salary = 4500 },
new Employee {EmployeeID = 4,EmployeeName="D", Department ="Dept1", Salary = 30000 },
};
以下是我的疑问:
var result1 = from x in Employees
group x by x.Salary into g
from y in g.OrderBy(x=>x.Salary).Take(2)
select new { y.EmployeeID };
foreach (var item in result1)
{
Console.WriteLine(item.EmployeeID);
}
我在这里要做的是,首先我要根据所有员工的工资对他们进行分组。然后对这些组进行排序,并使用take extension方法获取前两个组,然后打印这两个组中的所有员工
但我不知道为什么要打印所有的员工;它甚至都没有点。有人能分享一些想法并告诉我这个查询有什么问题吗?您可以先选择不同的最高工资,然后将其加入到员工中:
var q =
from s in Employees.Select(e => e.Salary).Distinct().OrderByDescending(s => s).Take(2)
from e in Employees.Where(e => e.Salary == s)
select e;
您可以先选择不同的最高工资,然后将其加入员工:
var q =
from s in Employees.Select(e => e.Salary).Distinct().OrderByDescending(s => s).Take(2)
from e in Employees.Where(e => e.Salary == s)
select e;
你能帮我查询一下吗,为什么不起作用?@sunil20000你的查询不起作用,因为你在每组中取前两个,而不是前两个组。请帮我查询一下,为什么不起作用?@sunil20000你的查询不起作用,因为你在每组中取前两个,而不是前两个组