LINQ querying a Dictionary against a List

c#, dictionary, linq, linq-to-objects, list

Solution

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

or of course

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

but this will bomb if keys don't exist.

you could fix this with a `Where(k => dic.ContainsKey(k))` clause:

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

After trawling the Linq source, I think that the last method is probably most efficient. Doing a join forces linq to make a `Lookup` (effectively a multi-entry hashtable) over one of the collections involved in the join. Seeing as we already have a Dictionary which offers the same lookup performance as a `Lookup`, building a `Lookup` is superfluous.

Problem

I have ``` List<string> selectedOptions; Dictionary<string,string> masterList; ``` `masterList` comprises of Keys, which are the superset for the values in `selectedoptions`. Now, I would like to extract all the Values for the intersecting Keys between `selectedOptions` and `masterList`. How would the LINQ query be framed?

Original source

Related problems