Как убрать дубли в данных?
У меня есть следующий метод для подготовки датасета.
Проблема такая: мне передают 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;
}
Источник: Stack Overflow на русском