using System.Collections.Generic;
public string Name {get; set;}
public override bool Equals(object o) {
return Name == ((Identifier)o).Name;
public override int GetHashCode() {
return Name.GetHashCode();
public static bool operator==(Identifier lhs, Identifier rhs) {
return lhs.Name == rhs.Name;
public static bool operator!=(Identifier lhs, Identifier rhs) {
public Identifier Id {get; set;}
public object Whatever {get; set;}
public override string ToString() {
return string.Format("{{ {0} }}", Whatever);
public static void Main()
IDictionary<string, ISet<Identifier>> idMap = new Dictionary<string, ISet<Identifier>> {
{"p1100", new HashSet<Identifier> {
new Identifier { Name = "Apple" },
new Identifier { Name = "Orange" },
new Identifier { Name = "Banana" }
{"r800[1]", new HashSet<Identifier> {
new Identifier { Name = "Foo" },
new Identifier { Name = "Bar" }
var results = new List<Result> {
new Result { Id = new Identifier { Name = "Orange" }, Whatever = 30 },
new Result { Id = new Identifier { Name = "Bar" }, Whatever = 12 },
var resMap = idMap.ToDictionary(
mapElement => mapElement.Key,
mapElement => results.SingleOrDefault(result => mapElement.Value.Contains(result.Id))
var resMap = RemapBasedOnIdentifiers(idMap, results, result => result.Id);
Console.WriteLine("{0}: {1}", e.Key, e.Value);
private static IDictionary<string, T> RemapBasedOnIdentifiers<T>(IDictionary<string, ISet<Identifier>> map, IEnumerable<T> en, Func<T, Identifier> idSelector)
mapElement => mapElement.Key,
mapElement => en.SingleOrDefault(x => mapElement.Value.Contains(idSelector(x)))