Finding the closest value and matching it with the correct item in the list
You cannot use a dictionary but you can use the GroupBy and then search for the closest key. The values of the group will be the items with same values.

var values = new[]
{
    new Foo{ Id ="A", Value = 1.2 },
    new Foo{ Id ="B", Value = 4.2 },
    new Foo{ Id ="C", Value = 7.2 },
    new Foo{ Id ="D", Value = 4.2 }
}
.GroupBy(x =&gt; x.Value);




where

struct Foo
{
    public string Id;
    public double Value;
}