linq C#,从列的重复记录中取一个值

siv3szwd  于 2023-03-05  发布在  C#
关注(0)|答案(1)|浏览(201)

我在payment表中有Emp_idnamepayment_date列,在这个表格中,将有Emp_idname的重复值与不同的payment_date。所以,当我想得到那些没有在给定的支付日期支付他们的工资的雇员姓名列表时,结果是重复的,只比较支付日期。我得到了重复的emp_idname。但我只想得到雇员姓名和emp_id一次,而不重复。

List<string> empIds = 
    db.UnRegistrations.Select(e => e.emp_Id).ToList();
    
foreach (string cbeId in cbeIds) 
{
    var unpaid = db.UnContributions
        .Where(td => td.Payment_month != date && td.Emp_Id == empIds)
        .GroupBy(td => new { td.emp_Id, td.Payment_month })
        .Select(group => group.First())
        .ToList()

    unpaidContributions.AddRange(unpaid);
}
lstz6jyr

lstz6jyr1#

您可以将LINQ查询修改为仅按雇员ID分组,然后选择不同的雇员姓名。下面是一个示例:

var unpaid = db.UnContributions
    .Where(td => td.Payment_month != date && empIds.Contains(td.Emp_Id))
    .GroupBy(td => td.Emp_Id)
    .Select(group => new { EmpId = group.Key, Name = group.First().Name })
    .ToList();

在此LINQ查询中,未付摊缴仅按雇员ID(组键)分组,然后它选择每个组中的第一条记录以获取雇员姓名(假设具有相同雇员ID的所有记录的姓名相同)。它还使用Contains方法按已检索的雇员ID列表筛选未付摊缴。
empIds列表上不必要的ToList调用也已删除。
希望这个有用。

相关问题