0

私はLinqが初めてで、次の問題を解決できません。インターネットでいろいろ調べてみましたが、適切な回答が得られませんでした。

次のクエリがあります。

var packages = from p in Packages
               from cl in p.Categories
               from temp in Clusters
               where (cl.Id == temp.Key)
               select p;

カテゴリは、id と名前を含むオブジェクトのコレクションです。ここでの Clusters は、キーと値のペアのディクショナリです。このクエリを実行すると、次のエラーが発生します。

タイプ 'System.Collections.Generic.KeyValuePair`2' の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。

もう 1 つのオプションは、パッケージ内の各カテゴリにも for each ループを追加することです。これを行うためのよりクリーンな方法はありますか?

4

2 に答える 2

3

Dictionary.ContainsKeyメソッドでクエリを試しましたか?

var packages = from p in Packages
               from cl in p.Categories
               where Clusters.ContainsKey(cl.Id)
               select p;
于 2012-07-11T11:12:31.090 に答える
0
var packages = Packages.Where( 
                   p => p.Categories.Any( 
                   c => Clusters.ContainsKey(c.Id)));

結果で各パッケージを1回だけにしたい場合。また、ContainsKey は O(Clusters.Count) ではなく O(1) であるため、より効率的です。

于 2012-07-11T11:19:38.670 に答える