我想并行加入多个相同类型的列表。
假设我有如下三个列表。
列表 1
id |Name |Phone|Address
1 |John |NULL |NULL
2 |David |NULL |NULL
列表 2
id |Name |Phone|Address
1 |NULL |1234 |NULL
2 |NULL |5678 |NULL
列表 3
id|Name|Phone|Address
1 |NULL|NULL |Plant ave
2 |NULL|NULL |Earth ave
我想将 ID 上的三个表加入一个新列表,例如,
新列表
id|Name |Phone|Address
1 |John |1234 |Plant ave
2 |David|5678 |Earth ave
这是我到目前为止所得到的,
lists.AsParallel().ForEach(JoinLists)
,但我不能再进一步了。任何建议表示赞赏。
编辑
这就是我为加入列表所做的。不平行。
var newList = from l1 in list1
join l2 in list2 on l1.Id equals l2.Id
join l3 in list3 on l1.Id equals l3.Id
select new
{
Id= l1.Id,
Name= li.Name,
Phone= l2.Phone,
Address = l3.Address
};
最佳答案
听起来您只想并行化现有的连接。这就像向每个源添加 .AsParallel()
一样简单:
var newList = from l1 in list1.AsParallel()
join l2 in list2.AsParallel() on l1.Id equals l2.Id
join l3 in list3.AsParallel() on l1.Id equals l3.Id
select new
{
Id= l1.Id,
Name= li.Name,
Phone= l2.Phone,
Address = l3.Address
};
像往常一样,你不应该对结果的排序做任何假设 - 但如果你不关心这一点,这在合适的硬件上应该会更快。 (当然,它总体上的效率会稍低一些。它仍然需要做同样的工作,但会增加并行化的开销。)
关于c# - 并行加入多个属性(property) list ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39002647/