我可以在此查询中使用lastordefault还是firstordefault吗?怎么能?

时间:2019-12-16 07:24:09

标签: c# linq

var Grdquery = from db in db.V_Salaries
.Where(i => i.InOut_Flag == 0 && i.Year == cariyil).OrderByDescending(i => i.Id)
 orderby db.Worker_Name, db.Year_Name
 select new { db.Id, };

foreach (var row in Grdquery)
{
    DataRow r = Table.NewRow();
    r["Id"] = row.Id;//0
    Table.Rows.Add(r);
 }

有45名员工。每位员工今年至少有一份薪水记录。但是10个人有2薪水。 所有记录都出现在下面的查询中。单个记录没有问题。但是我想要员工的最后一条记录有2条记录。 我们该如何解决?

3 个答案:

答案 0 :(得分:0)

如果记录升序使用LastOrDefault来获取Last元素,如果记录降序使用FirstOrDefault来获取last元素。您可以使用以下查询构成有效地获得结果

List<Employee> EmployeesSalaryrecord= data.OrderBy(x=>x.Id)
.GroupBy(p => p.EmployeeName)
.Select(g => g.LastOrDefault())
.ToList();

答案 1 :(得分:0)

您可以按人员Id分组所有工资:

var grouped = Grdquery.GroupBy(g => g.Id)
    .Select(a = new {Id = a.Key, Salaries = a.Select(b => b).ToList()})

答案 2 :(得分:0)

这样,您将为每个工人分配1个注册信息,并且使用更高的ID,这将是最新的工资ID和1个工资

Grdquery.Where(i => i.InOut_Flag == 0 && i.Year == cariyil).GroupBy(g => g.Worker_Id,(Key,a)=> a.OrderByDescending(b => b。 id).FirstOrDefault())。OrderBy(x => x.Worker_Name).ThenBy(x => x.Year_Name).Select(x => x.Id);

相关问题