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你的查询不起作用,因为你在每组中取前两个,而不是前两个组