【问题标题】:Find the N-th highest salary of employee using LINQ/Lambda使用 LINQ/Lambda 查找第 N 个最高薪水的员工
【发布时间】:2014-12-25 18:07:52
【问题描述】:

您好,我使用顺序 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).Skip(2).First()});
        foreach (var sal in ThirdHighestSal)
        {
            Console.WriteLine("3rd highest sal is {0}",sal.salary);
        }

当我执行它时,它会抛出异常

序列不包含任何元素(InvalidOperationException 未处理)

谁能帮我解决这个问题?

【问题讨论】:

标签: c# linq


【解决方案1】:

使用 FirstOrDefault 而不是 First,如果找不到元素,您将得到一个空对象。

使用 lamda 你可以这样写:

 var ThirdHighestSal = Employee.getAllEmployee().Select(x => x.Salary).Distinct().OrderByDescending(x => x).Skip(2).FirstOrDefault();

然后你得到 null 或(如果存在)第三高的薪水。

【讨论】:

  • 这不是答案,应该是评论。
  • 此评论是不必要的。你可以使用标志。
  • 谢谢。将来我会添加简短的答案作为评论!
  • 这不是简短的回答。您的回答不会解决 OP 的问题。
  • 抛出异常是因为 First() 在序列中找不到任何项目。这可以通过使用 FirstOrDefault() 来避免。但是为了进一步使用该对象,您必须检查它是否不为空。所以我认为它会解决他的问题。
猜你喜欢
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2019-11-02
  • 2014-02-26
  • 2011-01-30
  • 1970-01-01
相关资源
最近更新 更多