6

私は持っています

List<string> selectedOptions;
Dictionary<string,string> masterList;

masterListの値のスーパーセットであるキーで構成されselectedoptionsます。selectedOptionsここで、との間で交差するキーのすべての値を抽出したいと思いmasterListます。

LINQクエリはどのようにフレーム化されますか?

4

1 に答える 1

12
IEnumerable<KeyValuePair<string,string>> results = 
    dic.Join(keys, d => d.Key, x => x, (a, b) => a);

またはもちろん

var results2 = keys.Select(k => new {key = k, value = dic[k]});

しかし、キーが存在しない場合、これは爆撃します。

Where(k => dic.ContainsKey(k))これは次の句で修正できます。

var results3 = keys
     .Where(k => dic.ContainsKey(k))
     .Select(k => new {key = k, value = dic[k]});

Linqソースをトロールした後、最後の方法がおそらく最も効率的だと思います。結合を実行すると、linqはLookup結合に含まれるコレクションの1つに対して(事実上マルチエントリハッシュテーブル)を作成します。と同じルックアップパフォーマンスを提供する辞書がすでにあるので、aLookupを構築することLookupは不要です。

于 2012-08-24T17:46:42.213 に答える