我想在属性上并行加入多个具有相同类型的列表。 假设我有三个列表,如下所示。
列表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
};
答案 0 :(得分:2)
听起来您只想并行化现有的联接。这就像向每个来源添加.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
};
像往常一样,你不应该假设结果的订购 - 但如果你不关心这一点,那么在合适的硬件上应该更快。 (当然,整体效率会略低一些。它仍然需要做同样的工作,增加了并行化的开销。)