c# - 根据条件使用另一个列表中的值更新一个列表
问题描述
我有两个列表可以说:
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 的值更新元素的最佳方法是什么List1
List1
List2
我希望我能找到使用 LINQ 的解决方案,如下面的用于选择元素的解决方案
var list = List2.FindAll(y => List1.Any(x => y.name==x.name));
解决方案
由于您的条件是一个简单的“等于”条件,您可以使用连接
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