使用diff值合并两个相同类型的列表并避免重复

时间:2017-05-02 15:51:39

标签: c# .net list linq c#-4.0

我有两个相同类型的列表,具有不同的键值对, List1有" isPermanent = true"和List2也有假值 List1有一个额外的键" nextVacationDate"。

我试图将这些联合起来如下,但我担心由于价值不同,我仍然会得到重复。我需要将两个列表合并到一个列表中,然后按List1排序(首先是永久员工)..有没有更好的方法来使用LINQ?

public newList1 List1(string abcd)
    {
            var result = serviceMethod1(abcd);
            var newList1 = new List<emp>();
            if (result == null) return null;

            newList.AddRange(
                result.Select(x => new Model
                {
                    firstName = x.FName,
                    secondName = x.SName,
                    address = x.Address,
                    employeeId = x.EmpId,
                    isPermanent = true,
                    nextVacationDate =x.VacDt,
                    salary = x.Bsalary
                }));

            return newList1;


    }

    public newList2 List2(string defg)
    {
        var result = serviceMethod2(defg);
        var newList2 = new List<emp>();
        if (result == null) return null;

        newList.AddRange(
            result.Select(x => new Model
            {
                firstName = x.FName,
                secondName = x.SName,
                address = x.Address,
                employeeId = x.EmpId,
                isPermanent = false,
                salary = x.Bsalary
            }));

        return newList2;


    }
    private List<emp> EmployyeList(List<emp> newList1, List<emp> newList2)
    {
        var sortedEmpList1 = newList1.OrderBy(i => i.Fname);
        var sortedEmpList2 = newList2.OrderBy(i => i.Fname);

        List<MeterModel> combinedList = newList1.Union(newList2) as List<emp>;

        return combinedList;
    }

1 个答案:

答案 0 :(得分:2)

您可以过滤第二个列表以避免重复:

newList1.Union(newList2.Where(emp2 => !newList1.Any(emp1 => emp1.employeeId == emp2.employeeId)))