private static Dictionary<string, object> GetResolvedLinks(IEnumerable<Link> links, IDictionary<string, object> properties, string linkBase)
{
var subsituted = links;
if(properties.Any()) {
subsituted = links.Select(l => l.CreateLink(properties)).ToList();
}
var resolved = subsituted;
if(!String.IsNullOrWhiteSpace(linkBase)) {
resolved = subsituted.Select(l => l.RebaseLink(linkBase)).ToList();
}
var grouped = resolved.GroupBy(r => r.Rel);
var singles = grouped.Where(g => g.Count() <= 1 && g.All(l => !l.IsRelArray)).ToDictionary(k => k.Key, v => v.SingleOrDefault() as object);
var lists = grouped.Where(g => g.Count() > 1 || g.Any(l => l.IsRelArray)).ToDictionary(k => k.Key, v => v.AsEnumerable() as object);
var allLinks = singles.Concat(lists).ToDictionary(k => k.Key, v => v.Value);
return allLinks;
}