3

PLINQ を使用して、製品とカテゴリ間の内部結合を実行したいと考えています。しかし、両方のコレクションに対して AsParallel メソッドを呼び出す必要があるかどうかはわかりません。

// PLINQ  - Option 1
jointTables =     from c in Homework02.categories.AsParallel()
                  join p in Homework02.productList on c.Name equals p.Category
                  select new { Category = c, Product = p };

// PLINQ  - Option 2
jointTables = from c in Homework02.categories.AsParallel()
              join p in Homework02.productList.AsParallel() on c.Name equals p.Category
              select new { Category = c, Product = p };
4

1 に答える 1

5

オプション 2 を使用する必要があります。つまりAsParallel()、2 番目のシーケンスでも明示的に呼び出します。

2 番目のシーケンスが type であるオーバーロードに関するMSDN ドキュメントから:JoinIEnumerable<TInner>

この Join オーバーロードは決して呼び出されるべきではありません。このメソッドは古いものとしてマークされており、呼び出されると常に NotSupportedException をスローします。

宣言の obsolete-attribute にも注意してください。

[ObsoleteAttribute(@"The second data source of a binary operator 
                    must be of type System.Linq.ParallelQuery<T> 
                    rather than System.Collections.Generic.IEnumerable<T>. 
                    To fix this problem, use the AsParallel() extension
                    method to convert the right data source to
                    System.Linq.ParallelQuery<T>.")]
public static ParallelQuery<TResult> Join<TOuter, TInner, TKey, TResult>(
    this ParallelQuery<TOuter> outer,
    IEnumerable<TInner> inner,
    Func<TOuter, TKey> outerKeySelector,
    Func<TInner, TKey> innerKeySelector,
    Func<TOuter, TInner, TResult> resultSelector
)
于 2013-02-21T17:24:24.810 に答える