C# 使用LINQ/Lambda查找员工的第N个最高工资
嗨,我用顺序Linq从像这样的员工那里拿到了第n个最高的薪水C# 使用LINQ/Lambda查找员工的第N个最高工资,c#,linq,C#,Linq,嗨,我用顺序Linq从像这样的员工那里拿到了第n个最高的薪水 var ThirdHighestSal = from vr in Employee.getAllEmployee() group vr by vr.Salary into gr orderby gr.Key descending select( new {salary=gr.OrderBy(x=>x.Salary).Sk
var ThirdHighestSal = from vr in Employee.getAllEmployee()
group vr by vr.Salary into gr
orderby gr.Key descending
select( new {salary=gr.OrderBy(x=>x.Salary).Skip(2).First()});
foreach (var sal in ThirdHighestSal)
{
Console.WriteLine("3rd highest sal is {0}",sal.salary);
}
当我执行此命令时,它会抛出异常,如
序列不包含元素(InvalidOperationException未处理)
有人能帮我查询吗?使用FirstOrDefault而不是First,如果找不到元素,您将得到一个空对象 有了lamda,你可以写:
var ThirdHighestSal = Employee.getAllEmployee().Select(x => x.Salary).Distinct().OrderByDescending(x => x).Skip(2).FirstOrDefault();
然后你会得到空值或(如果存在)第三高工资。这不是答案,这应该是一条评论。这条评论是不必要的。你可以用国旗,谢谢。在未来,我将添加简短的答案作为评论!这不是简单的回答。您的回答无法解决OP的问题。引发异常是因为First()在序列中找不到任何项。这可以通过使用FirstOrDefault()来避免。但是为了进一步使用该对象,您必须检查它是否为null。所以我想这会解决他的问题。可能是