首页 > 解决方案 > 根据条件使用另一个列表中的值更新一个列表

问题描述

我有两个列表可以说:

List1 = [{"name":"john", "limit":"21"},{"name":"edith", "limit":"21"}, {"name":"sam", "limit":"50"}]

List2 = [{"name":"john", "limit":"21"},{"name":"john", "limit":"21"} {"name":"edith", "limit":"21"}, {"name":"sam", "limit":"30"}, {"name":"sam", "limit":"30"}]

根据 name in 的值等于name in 的值的条件,List2用来自元素 in 的值更新元素的最佳方法是什么List1List1List2

我希望我能找到使用 LINQ 的解决方案,如下面的用于选择元素的解决方案

var list = List2.FindAll(y => List1.Any(x => y.name==x.name));

标签: c#listlinq

解决方案


由于您的条件是一个简单的“等于”条件,您可以使用连接

from source in list1
join target in list2 on source.name equals target.name
select new {target.name, source.limit}

这是基于问题数据的简单测试:

var list1 = new List<dynamic>{new {name = "john", limit = "21"}, new {name = "edith", limit = "21"}, new {name = "sam", limit = "50"}};
var list2 = new List<dynamic>{new {name = "john", limit = "21"}, new {name = "john", limit = "21"}, new {name = "edith", limit = "21"}, new {name = "sam", limit = "30"}, new {name = "sam", limit = "30"}};

var query = from source in list1
    join target in list2 on source.name equals target.name
    select new {target.name, source.limit};

foreach (var x in query)
{
    Console.WriteLine($"name = {x.name}, limit = {x.limit}");
}

输出:

name = john, limit = 21
name = john, limit = 21
name = edith, limit = 21
name = sam, limit = 50
name = sam, limit = 50

推荐阅读