LINQ查询从表中选择2列具有最大值的记录

时间:2015-07-06 15:30:26

标签: c# linq linq-to-sql

我在sql server table中有以下数据:

EmployeeId  ForMonth    ForYear     Value   
1           1           2015        45000.00
1           6           2015        35000.00
1           12          2014        66666.00
2           1           2015        70000.00
2           5           2015        80000.00

我需要找到LINQ-to-SQL查询,为每个EmployeeId选择具有max ForMonth和max ForYear的记录。 所以结果应该是:

EmployeeId  ForMonth    ForYear     Value   
1           6           2015        35000.00
2           5           2015        80000.00

这不是我在发布这个问题之前没有尝试解决这个问题,但问题是我不知道如何在SQL服务器中编写这个查询,所以我没有任何LINQ代码加。 如果您发现这是一个糟糕的问题,请让我将其删除。

2 个答案:

答案 0 :(得分:2)

您只需要每位员工1条记录,因此您需要按ID进行分组。然后按最新的年/月订购您的小组并选择第一个小组

var query = from e in db.Employees
            group e by e.EmployeeId into g
            select g.OrderByDescending(e => e.ForYear)
                    .ThenByDescending(e => e.ForMonth)
                    .FirstOrDefault();

答案 1 :(得分:0)

我假设你想要最大ForYear和最大ForMonth

的记录
var result = (from db in MYDBContext
             orderby db.ForYear descending, db.ForMonth descending
             select db).First();