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条记录。 我们该如何解决?
答案 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);