加入两个集合,从第二个集合中获取值(左外连接)

reg*_*tar 2 .net c# linq collections

说我有两个List<KeyValuePair<string, string>>a和b,其中a =

"one", "N",
"two", "N",
"three", "N"
Run Code Online (Sandbox Code Playgroud)

和b =

"one", "Y"
"two", "N"
Run Code Online (Sandbox Code Playgroud)

我想做一个左外连接,但是Value如果b中有一个条目则取b的值,所以结果应为=

"one", "Y" <- this value is taken from b
"two", "N",
"three", "N"
Run Code Online (Sandbox Code Playgroud)

我尝试过做一个普通的左外连接,但是Value"三" 的结果总是一个空字符串

    var res = (from l in a
              join r in b on l.Key equals r.Key into lrs
              from lr in lrs.DefaultIfEmpty()
              select new KeyValuePair<string, string>(l.Key, lr.Value)).ToArray();
Run Code Online (Sandbox Code Playgroud)

p.s*_*w.g 5

这也应该有效:

var res = (from p in b.Concat(a)
           group p by p.Key into g
           select g.First()).ToArray();
Run Code Online (Sandbox Code Playgroud)

或者用流利的语法:

var res = b.Concat(a).GroupBy(p => p.Key, (k, g) => g.First()).ToArray();
Run Code Online (Sandbox Code Playgroud)