我想并行加入多个相同类型的列表。
假设我有如下三个列表。

列表 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/

10-12 12:36
查看更多