使用LINQ合并集合,同时覆盖具有相同ID的行

asm*_*smo 3 c# linq

我有两个对象集合。

例如:

List<Foo> firstFoos = new List<Foo>();
List<Foo> secondFoos = new List<Foo>();

firstFoos.Add(new Foo() { Id = 1, ValueA = 10, ValueB = 15 });
firstFoos.Add(new Foo() { Id = 2, ValueA = 20, ValueB = 25 });
firstFoos.Add(new Foo() { Id = 3, ValueA = 30, ValueB = 35 });
firstFoos.Add(new Foo() { Id = 4, ValueA = 40, ValueB = 45 });

secondFoos.Add(new Foo() { Id = 1, ValueA = 100, ValueB = 150 });
secondFoos.Add(new Foo() { Id = 2, ValueA = 200, ValueB = 250 });
Run Code Online (Sandbox Code Playgroud)

使用LINQ,我怎么能合并这两个集合覆盖firstFoossecondFoos具有相同ID?

预期结果是:

|   Id    | ValueA | ValueB |
|---------|--------|--------|
|    1    |   100  |   150  |
|    2    |   200  |   250  |
|    3    |   30   |   35   |
|    4    |   40   |   45   |
Run Code Online (Sandbox Code Playgroud)

请注意,此示例案例只有两个值列(ValueAValueB),但实际案例可能还有更多。

tza*_*man 5

我将其转换为Id -> Foo字典,然后使用常规的foreach更新:

var fooDict = firstFoos.ToDictionary(foo => foo.Id, foo => foo);
foreach (var foo in secondFoos) 
    fooDict[foo.Id] = foo;
var newFoos = fooDict.Values.OrderBy(foo => foo.Id).ToList();
Run Code Online (Sandbox Code Playgroud)