Как убрать дубли в данных?

Рейтинг: 0Ответов: 1Опубликовано: 18.05.2023

У меня есть следующий метод для подготовки датасета. Проблема такая: мне передают id территорий, по ним я группирую и формирую датасет. Вот по какой-то причине, если передать сразу несколько id и данные будут иметь что-то общее, то вот это будет дублироваться: accessGroup.Id, accessGroup.Title, accessGroup.Description Помогите, пожалуйста, понять, где ошибка

private async Task<AccessTerritoryDataSet> PrepareDataSet()
    {
        var dataSet = new AccessTerritoryDataSet();

        var territoriesIDs = _parameters.TerritoriesIDs;

        var accessGroups = await _accessGroupClient.GetByTerritoriesIds( territoriesIDs )
            .Unwrap();

        var groupedAccessGroups = accessGroups
            .SelectMany( accessGroup => accessGroup.Compositions,
                ( accessGroup, compositions ) => (
                    accessGroup.Id,
                    accessGroup.Title,
                    accessGroup.Description,
                    Compositions: compositions
                ) )                                                                                                     
            .Where( accessGroup => territoriesIDs.Contains( accessGroup.Compositions.TerritoryId ) )
            .GroupBy( accessGroup => accessGroup.Compositions.TerritoryId );

        foreach ( var accessGroup in groupedAccessGroups )
        {
            var territoryId = accessGroup.Key;
            var territoryTitle = accessGroup.FirstOrDefault()
                .Compositions.TerritoryTitle;

            dataSet.Territory.AddTerritoryRow(
                territoryId,
                territoryTitle );

            var subjects = await GetSubjects( territoryId );
            var departments = await _departmentClient
                .Get( subjects.Select( subject => subject.Department.Id ) )
                .Unwrap();

            Dictionary<string, string> departmentsDict = new();
            if ( _parameters.ShowHierarchyPath )
            {
                departmentsDict = await GetDepartmentsWithNested( departments.ToList() );
            }

            var dataSetRows = new List<DataRow>();

            dataSetRows.AddRange( accessGroup.Select( accessProfile =>
                NewAccessGroupRow(
                    territoryId,
                    accessProfile.Compositions.AccessScheduleTitle,
                    accessProfile.Title,
                    accessProfile.Description,
                    dataSet ) ) );

            dataSetRows.AddRange( subjects.Select( subject =>
                NewSubjectRow(
                    $"Субъекты доступа: {GroupTitles.Titles[ subject.CategoryId ]}",
                    territoryId,
                    subject,
                    dataSet,
                    departmentsDict.TryGetValue(
                        subject.Department.Id,
                        out var department ) ? department : "" ) ) );

            dataSetRows.AddRange( departments.Select( department =>
                NewDepartmentRow(
                    territoryId,
                    department,
                    dataSet ) ) );

            foreach ( var row in dataSetRows )
                dataSet.NestedObject.Rows.Add( row );
        }

        return dataSet;
    }




private AccessTerritoryDataSet.NestedObjectRow NewAccessGroupRow(
        string territoryId,
        string schedule,
        string title,
        string description,
        AccessTerritoryDataSet dataSet )
    {
        var nestedTerritoryRow = dataSet.NestedObject
            .NewNestedObjectRow();

        nestedTerritoryRow.TerritoryID = territoryId;
        nestedTerritoryRow.Title = title;
        nestedTerritoryRow.Description = description;
        nestedTerritoryRow.Schedule = schedule;
        nestedTerritoryRow.GroupTitle = "Стандартные профили доступа";

        return nestedTerritoryRow;
    }

    private AccessTerritoryDataSet.NestedObjectRow NewDepartmentRow(
        string territoryId,
        DepartmentDto department,
        AccessTerritoryDataSet dataSet )
    {
        var nestedDepartmentRow = dataSet.NestedObject
            .NewNestedObjectRow();

        nestedDepartmentRow.TerritoryID = territoryId;
        nestedDepartmentRow.Title = department.Title;
        nestedDepartmentRow.Description = department.Description;
        nestedDepartmentRow.Schedule = department.WorktimeSchedule?.Title;
        nestedDepartmentRow.GroupTitle = "Подразделения";

        return nestedDepartmentRow;
    }

    private AccessTerritoryDataSet.NestedObjectRow NewSubjectRow(
        string groupTitle,
        string territoryId,
        SubjectDto subject,
        AccessTerritoryDataSet dataSet,
        string department = "" )
    {
        var nestedSubjectRow = dataSet.NestedObject
            .NewNestedObjectRow();

        nestedSubjectRow.TerritoryID = territoryId;
        nestedSubjectRow.Title = subject.Title += $"\r\n{department}";
        nestedSubjectRow.Schedule = subject.WorktimeSchedule?.Title;
        nestedSubjectRow.GroupTitle = groupTitle;

        return nestedSubjectRow;
    }

Ответы

▲ 0Принят

дубли убрал так:

.DistinctBy( group => new { 
    group.Compositions.TerritoryId, 
    group.Id, 
    group.Title,
    group.Description } )