并行连接属性上的多个列表

本文关键字:列表 属性 并行连接 | 更新日期: 2023-09-27 18:02:52

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

列表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为in的表连接到一个新的列表中,如

新列表

 id|Name |Phone|Address
 1 |John |1234 |Plant ave
 2 |David|5678 |Earth ave

这是我目前得到的,lists.AsParallel().ForEach(JoinLists),但我不能再进一步了。

请多多指教。

编辑

这就是我对join list所做的。不是平行的。

       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 
              };
像往常一样,您不应该对结果的排序进行任何假设-但是如果您不关心这个,那么在合适的硬件上应该更快。(当然,总的来说效率会稍微低一些。它仍然需要做同样的工作,并增加了并行化的开销。)