私は持っています
List<string> selectedOptions;
Dictionary<string,string> masterList;
masterList
の値のスーパーセットであるキーで構成されselectedoptions
ます。selectedOptions
ここで、との間で交差するキーのすべての値を抽出したいと思いmasterList
ます。
LINQクエリはどのようにフレーム化されますか?
私は持っています
List<string> selectedOptions;
Dictionary<string,string> masterList;
masterList
の値のスーパーセットであるキーで構成されselectedoptions
ます。selectedOptions
ここで、との間で交差するキーのすべての値を抽出したいと思いmasterList
ます。
LINQクエリはどのようにフレーム化されますか?
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
は不要です。