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

用于两个列表比较和替换的C LINQ代码,linq,Linq,我有两个对象“用户”列表 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 =

我有两个对象“用户”列表

    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的对象

我想通过对象的“Name”属性比较“listOld”和“listNew”,并将旧对象值与“listNew”进行比较

最终结果应该是

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

如果我简单地说,使用列表项的“Name”比较这两个列表,并将旧对象与新列表进行比较

我只是想知道这个的LINQ代码


谢谢你

也许不是最有效的方法,但这应该有效:

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
    }
  );

你试过什么吗?在要求编写代码之前先尝试编写代码是很好的。这样你会学到一些东西,而不仅仅是得到一个完整的解决方案是的。。。我可以按对象来比较两个列表,但不能按对象的属性来比较。您可以通过选择两个部分来简化GroupJoin,然后使用带有DefaultIfEmpty的SelectMany从旧表中不存在的新表中选择值。