使用LINQ使用其他列表更新一个对象属性列表

Sud*_*ha 1 c# linq

我有一个思考的场景

class a 
{
  String Username;
  String val;
}


 List<a> lst = new List<a>();

 List<a> lstnew = new List<a>();
Run Code Online (Sandbox Code Playgroud)

我需要的是lstnew我在val属性中有一些更新的值(仅在几个对象中),我需要的是使用LINQ更新lst带有更新值lstnewUsername属性作为属性

Jef*_*ata 8

您可以加入这两个列表UserName,然后Value使用第二个列表中的s 更新第一个列表中的s.

例如,给定此类并列出:

public class a
{
    public string UserName { get; set; }
    public string Value { get; set; }
}

List<a> list = new List<a>
{
    new a { UserName = "Perry", Value = "A" },
    new a { UserName = "Ferb", Value = "B" },
    new a { UserName = "Phineas", Value = "C" }
};

List<a> newList = new List<a>
{
    new a { UserName = "Phineas", Value = "X" },
    new a { UserName = "Ferb", Value = "Y" },
    new a { UserName = "Candace", Value = "Z" }
};
Run Code Online (Sandbox Code Playgroud)

您可以加入以获取具有常见UserNames 的元素:

var common = from a1 in list
             join a2 in newList on a1.UserName equals a2.UserName
             select new { A1 = a1, A2 = a2 };
Run Code Online (Sandbox Code Playgroud)

此时,如果我理解正确,您想要更新原始列表中的元素:

foreach(var c in common)
{
    c.A1.Value = c.A2.Value;
}
Run Code Online (Sandbox Code Playgroud)

在这一点上的元素list看起来像:

UserName    Value
-----------------
Perry       A
Ferb        Y
Phineas     X
Run Code Online (Sandbox Code Playgroud)