Как получить список групп, которым принадлежат территории?
Мне необходимо получить группы территорий, которые принадлежат территориям.
Делается это так:
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; }
}