首页 > 解决方案 > 如何比较两个列表并返回 4 个类别列表

问题描述

我有两个列表具有相同的属性,我想比较它们之间的数据,我需要在视图中显示三个列表

  1. NewlyAdded员工(完成)
  2. Deleted员工(完成)
  3. Common员工(完成)
  4. 更新员工(不知道如何)

我已经列出了前 3 个列表,但我不知道如何获取更新的数据然后我可以将更改部署到,destEmps以便任何人都可以帮助我?

public class srsEmployee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string EmpCode { get; set; }
    public Nullable<decimal> Salary { get; set; }
    public Nullable<system.datetime> StartDate { get; set; }
    public Nullable<system.datetime> BOD { get; set; }
    public int DepartmentId { get; set; }
    public bool Active { get; set; }

    public virtual srsDepartment srsDepartment { get; set; }
}

public class destEmployee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string EmpCode { get; set; }
    public Nullable<decimal> Salary { get; set; }
    public Nullable<system.datetime> StartDate { get; set; }
    public Nullable<system.datetime> BOD { get; set; }
    public int DepartmentId { get; set; }
    public bool Active { get; set; }

    public virtual destDepartment destDepartment { get; set; }
}

这些是我用来获取 3 个列表的查询:

var Common = destEmps.Where(n => srsEmps.Any(o => o.EmpCode == n.EmpCode)).ToList();
var Deleted = srsEmps.Where(o => !destEmps.Any(n => n.EmpCode == o.EmpCode)).ToList();
var NewlyAdded = destEmps.Where(n => !srsEmps.Any(o => o.EmpCode == n.EmpCode)).ToList();

标签: c#.netlinq

解决方案


var Updated =
            from d in destEmps
            join c in srsEmployee
            on c.Id equals d.Id
            where d.Name != c.Name || d.EmpCode != c.EmpCode ..........
            select d;

 foreach(var element in destEmps)
        {
            var oldValue = srsEmployee.First(t => t.Id == element.Id);
            element.Name = oldValue.Name;
            .....
        }

推荐阅读