Question: I have a dictionary collection as bleow:

```
mydic.addvalue(key1, val1)
mydic.addvalue(key2, val1)
mydic.addvalue(key3, val1)
mydic.addvalue(key4, val2)
mydic.addvalue(key5, val2)

```

From the above dictionary I want to delete all the entries where value == "val1", so that the result would have only following entry:

```
mydic.addvalue(key4, val2)
mydic.addvalue(key5, val2)

```

My VB source code is on VS2008 and targeted for 3.5

Answer: 
A non-LINQ answer based on a comment by the user.

```
private static void RemoveByValue<TKey,TValue>(Dictionary<TKey, TValue> dictionary, TValue someValue)
{
    List<TKey> itemsToRemove = new List<TKey>();

    foreach (var pair in dictionary)
    {
        if (pair.Value.Equals(someValue))
            itemsToRemove.Add(pair.Key);
    }

    foreach (TKey item in itemsToRemove)
    {
        dictionary.Remove(item);
    }
}

```

Example usage:

```
Dictionary<int, string> dictionary = new Dictionary<int, string>();
dictionary.Add(1, "foo");
dictionary.Add(2, "foo");
dictionary.Add(3, "bar");
string someValue = "foo";
RemoveByValue(dictionary, someValue);

```

Same caveat as with the other answers: if your value determines equality by reference, you'll need to do extra work. This is just a base.
You can also use

```
var x= (from k in mydic
           where k.Value != val1
           select k).ToDictionary(k=>k.key);

```

x will not have any of the val1's