并行加入多个属性列表

时间:2016-08-17 17:13:49

标签: c# linq

我想在属性上并行加入多个具有相同类型的列表。 假设我有三个列表,如下所示。

列表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 
                };

1 个答案:

答案 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 
              };

像往常一样,你不应该假设结果的订购 - 但如果你不关心这一点,那么在合适的硬件上应该更快。 (当然,整体效率会略低一些。它仍然需要做同样的工作,增加了并行化的开销。)