2016-11-11 7 views
0

列挙型から列挙型のサブセットを取得し、後で辞書の値に基づいてランダムな列挙型要素を選択したいとします。私はこれをやってみました:LINQクエリ列挙体一覧

var allEnums = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>(); 
    var availableEnums = allEnums.Where(e => SomeClass.SomeDictionary[e] < someThreshold); 
    //Note: SomeDictionary<MyEnum, int> 

また、これは動作しません。次のいずれかの

var availableEnums = SomeClass.SomeDictionary.Where(entry => entry.Value < someThreshold); 

availableEnumsの値は常に{System.Linq.Enumerable + c__Iterator1D`1 [[AircraftModel、組立-CSHARPです、Version = 0.0.0.0、Culture =ニュートラル、PublicKeyToken = null]]}。私は何か非常に愚かなことをしているに違いないが、どうすれば正しいのだろうか?

+0

達成しようとしているものがある場合は、コレクションを必要とする場合は、.ToArray()またはToList()を使用してクエリの結果を投影する必要があります。 Whereと他のlinq拡張はシーケンスを返します。遅延実行を調べる必要があります。 – reckface

+0

ディクショナリには各列挙型の重みが含まれていますか? –

+0

@reckfaceありがとう、.ToList()は.FindAll(...)とともにジョブを実行しました。私はもっ​​と見る必要があると思う。どこか、私はそれがちょうどのようだったと思った。 – Maritn

答えて

0

あなたが使用したいと思います

var availableEnums = SomeClass.SomeDictionary 
         .Where(entry => entry.Value < someThreshold) 
         .ToList(); 
// or 
var availableEnums = SomeClass.SomeDictionary 
         .Where(entry => entry.Value < someThreshold) 
         .ToArray() 

のfindAllは、LINQの拡張機能とプロジェクトの結果の前にすぐに、どこに延期されたのに対し、あなたは[並べ替えのような複数の操作を効率的に連鎖することを可能にする、取るというように突出した前でしたあなたの結果。