2011-08-01 15 views

答えて

0

問題がどこにあるかわかりません。私はあなたが望むと思っています

IEnumerable<string> enumerable = new List<string>(); 
Expression<Func<IEnumerable<string>, IEnumerable<bool>>> expression = a => a.Select(b => b == true); 

自動的に拡大縮小します。つまり、AsParallel()は、別のGetEnumerator()メソッドを実装するクラスを返すだけです。それはまだIEnumerable < T>インターフェイス上で動作します。あなたはなぜ実装しないのですか

Expression<Func<ParallelQuery<TSource>, IEnumerable<bool>>> expression = a => a.Select(b => b == true); 

デフォルトでは?次に、次のようなものを用意してください:

void Execute(Expression<Func<ParallelQuery<string>, IEnumerable<bool>>> expression, IEnumerable<string> strings) 
{ 
    ParallelQuery<string> parStrings; 
    if (!typeof (ParallelQuery<string>).IsAssignableFrom(strings.GetType())) 
     parStrings = strings as ParallelQuery<string>; 
    else 
     parStrings = strings.AsParallel(); 

    expression.Compile()(parStrings); 
} 

ロングストーリー。式はParallelQuery < T>で既定で操作し、IEnumerable < T>をParallelQuery < T>に変換します。それ以外の場合は、ノードのトラバーサル/クエリの再構成が必要です。 (あなたの質問に答えても、とにかくわかりません)

警告のExpression.Compile()は非常に重い方法です。パフォーマンスが必要な場合は、可能な場合は避けてください。

関連する問題