C#LINQ代码用于两个列表的比较和替换

时间:2015-03-26 06:28:56

标签: linq

我有两个对象列表' User'

    User u1 = new User { Id = 1, Name = "user1" };
    User u2 = new User { Id = 2, Name = "user2" };
    User u3 = new User { Id = 3, Name = "user3" };
    User u3_1 = new User { Id = 10, Name = "user3" };
    User u5 = new User { Id = 5, Name = "user5" };
    User u6 = new User { Id = 6, Name = "user6" };

    List<User> listOld = new List<User> { u1, u2, u3 };
    List<User> listNew = new List<User> { u1, u2, u3_1, u5, u6 };

u3和u3_1是两个具有相同名称和不同ID的对象

我想比较&#39; listOld&#39;和&#39; listNew&#39;通过对象&#39;名称&#39;属性并将旧对象值获取到&#39; listNew&#39;。

最终结果应为

listNew = {u1,u2,u3,u5,u6}

如果我简单地说,请使用列表项比较两个列表&#39;名称&#39;并将旧对象添加到新列表

我只是想知道LINQ代码。

谢谢

1 个答案:

答案 0 :(得分:2)

可能不是最有效的方法,但这应该有效:

var result=listNew
  .GroupJoin(listOld,k1=>k1.Name,k2=>k2.Name,(k1,k2)=>
    new User {
      Id=k2.SingleOrDefault()==null?k1.Id:k2.SingleOrDefault().Id,
      Name=k2.SingleOrDefault()==null?k1.Name:k2.SingleOrDefault().Name
    }
  );