Reverse Dictionary: Group from child array elements and get its minimum key
Indeed, you could use GroupBy but I think it's easier to solve with the query syntax because we also need the item from the first list to sort by its Id. Without it, we would need to do additional lookups like you do.

var result =     
    from item in items // from + from = SelectMany
    from child in item.Children
    orderby item.Id // sort in ascending order
    group item.Id by child into g // group by child
    select (Child: g.Key, MinId: g.First()); // the first item in each group is the min-id


If you use select g instead, you'll get IGrouping&lt;char, int&gt; which you can easily turn into a dictionary or a lookup.