Как получить список групп, которым принадлежат территории?

Мне необходимо получить группы территорий, которые принадлежат территориям.

Делается это так:

var territoryGroups = dbContext.Set<TerritoryGroup>()
     .Where( x => ids.Contains( x.ChildId ) )
     .ToList();

После этого, мне необходимо все это сгруппировать. Допустим, первая территория входит в первую группу, вторая территория во вторую группу, а третья входит в первую. Ну и хочется получить что-то такое:

(key: [firstTerritory, thirdTerritory], value: firstGroup), (key: [secondTerritory], value: secondGroup)

Я решил сделать так:

var territoryGroups = dbContext.Set<TerritoryGroup>()
        .Where( x => ids.Contains( x.ChildId ) )
        .ToList();

var groupedTeritories = territoryGroups
         .GroupBy( x => x.ParentId)
         .Select( x => x)
         .ToDictionary(
         x => x.Select( x => new
         {
             x.ChildId
         } ).ToList(),
         x => x.Select( x => x.Parent )
               .Where( x => x.DeletionTime == null )
               .Distinct()
               .ToList()
);

На мой взгляд, это выглядит как-то плохо и некрасиво. Слишком много linq, что скажется на производительности Помогите отрефакторить, пожалуйста

Модель:

public class TerritoryGroup
{
    public Guid ParentId { get; set; }
    public virtual Territory Parent { get; set; }

    public Guid ChildId { get; set; }
    public virtual Territory Child { get; set; }
}

Ответы (0 шт):