using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
var keys = new[] { "key1", "key2" };
var services = new Dictionary<string, Service>
{
{"key1", new Service {Components = new Dictionary<string, string> {{"comp1", "value1"}}}},
{"key2", new Service {Components = new Dictionary<string, string> {{"comp2", "value2"}}}}
};
var serviceComponents = GetServiceComponents(keys, services);
// do something with it
}
public static IEnumerable<ServiceComponent> GetServiceComponents(string[] keys, Dictionary<string, Service> services)
{
var serviceComponents = new List<ServiceComponent>();
foreach (
var key in
keys.Select(
name =>
services.FirstOrDefault(
x => x.Key.Equals(name))))
{
serviceComponents.AddRange(key.Value.Components.Select(component => new ServiceComponent
{
Name = key.Key,
Service = component.Key,
Value = component.Value,
}));
}
return serviceComponents.ToArray();
}
}
public class Service
{
public Dictionary<string, string> Components { get; set; }
}
public class ServiceComponent
{
public string Name { get; set; }
public string Service { get; set; }
public string Value { get; set; }
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIGtleXMgPSBuZXdbXSB7ICJrZXkxIiwgImtleTIiIH07CgoJCXZhciBzZXJ2aWNlcyA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgU2VydmljZT4KCQl7CgkJCXsia2V5MSIsIG5ldyBTZXJ2aWNlIHtDb21wb25lbnRzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBzdHJpbmc+IHt7ImNvbXAxIiwgInZhbHVlMSJ9fX19LAoJCQl7ImtleTIiLCBuZXcgU2VydmljZSB7Q29tcG9uZW50cyA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPiB7eyJjb21wMiIsICJ2YWx1ZTIifX19fQoJCX07CgoKCQl2YXIgc2VydmljZUNvbXBvbmVudHMgPSBHZXRTZXJ2aWNlQ29tcG9uZW50cyhrZXlzLCBzZXJ2aWNlcyk7CgkJLy8gZG8gc29tZXRoaW5nIHdpdGggaXQKCX0KCQoJcHVibGljIHN0YXRpYyBJRW51bWVyYWJsZTxTZXJ2aWNlQ29tcG9uZW50PiBHZXRTZXJ2aWNlQ29tcG9uZW50cyhzdHJpbmdbXSBrZXlzLCBEaWN0aW9uYXJ5PHN0cmluZywgU2VydmljZT4gc2VydmljZXMpCgl7CgkJdmFyIHNlcnZpY2VDb21wb25lbnRzID0gbmV3IExpc3Q8U2VydmljZUNvbXBvbmVudD4oKTsKCgkJZm9yZWFjaCAoCgkJCXZhciBrZXkgaW4KCQkJCWtleXMuU2VsZWN0KAoJCQkJCW5hbWUgPT4KCQkJCQkJc2VydmljZXMuRmlyc3RPckRlZmF1bHQoCgkJCQkJCQl4ID0+IHguS2V5LkVxdWFscyhuYW1lKSkpKQoJCXsKCQkJc2VydmljZUNvbXBvbmVudHMuQWRkUmFuZ2Uoa2V5LlZhbHVlLkNvbXBvbmVudHMuU2VsZWN0KGNvbXBvbmVudCA9PiBuZXcgU2VydmljZUNvbXBvbmVudAoJCQl7CgkJCQlOYW1lID0ga2V5LktleSwKCQkJCVNlcnZpY2UgPSBjb21wb25lbnQuS2V5LAoJCQkJVmFsdWUgPSBjb21wb25lbnQuVmFsdWUsCgkJCX0pKTsKCQl9CgoJCXJldHVybiBzZXJ2aWNlQ29tcG9uZW50cy5Ub0FycmF5KCk7CgoJfQp9CgpwdWJsaWMgY2xhc3MgU2VydmljZQp7CglwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4gQ29tcG9uZW50cyB7IGdldDsgc2V0OyB9Cn0KCnB1YmxpYyBjbGFzcyBTZXJ2aWNlQ29tcG9uZW50CnsKCXB1YmxpYyBzdHJpbmcgTmFtZSB7IGdldDsgc2V0OyB9CglwdWJsaWMgc3RyaW5nIFNlcnZpY2UgeyBnZXQ7IHNldDsgfQoJcHVibGljIHN0cmluZyBWYWx1ZSB7IGdldDsgc2V0OyB9Cn0=