Замена местами сгруппированных данных

103
09 декабря 2021, 06:20

Есть вот такой класс

public class User
{
   public string Name { get; set; }
   public OrgItem orgItem { get; set; }
}

Создаю и заполняю список данными

var newList = new List<User>();
newList.Add(new User { Name = "elv", orgItem = new OrgItem { Id = 1, Name = "test1" } });
newList.Add(new User { Name = "elv2", orgItem = new OrgItem { Id = 1, Name = "test1" } });
newList.Add(new User { Name = "elv3", orgItem = new OrgItem { Id = 1, Name = "test1" } });
newList.Add(new User { Name = "elv11", orgItem = new OrgItem { Id = 3, Name = "test3" } });

Далее , группирую список по orgItem

var model = newList.GroupBy(x => x.orgItem.Id);

В получившемся сгруппированном списке мне необходимо переместить elv3 в группировку с OrgItem Id=3 и при этом удалить из группировки с Id=1. Как это возможно сделать?

Заранее это сделать не возможно при получении данных, так как при любой замене данных, это всё меняется в БД, что отсекает такое решение.

Answer 1

Посмотрите на тип результата GroupBy: интерфейс IEnumerable<IGrouping<TKey, TSource>>, и на IGrouping: public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable

Все завязано на IEnumerable, который не предполагает изменений коллекции. Поэтому если не уйти от типа результата группировки, то задачу не решить.

Ну а найти нужный элемент для операций удаления и вставки можно так:

var searchName = "elv3";
var itemId = model.Where(e => e.Any(i => i.Name == searchName)).Single().Key;
var item = model.Single(e => e.Key == itemId).FirstOrDefault(e => e.Name == searchName);

Получить список без него:

var _a = model.Where(e => e.Key == itemId).Single().ToList().Where(e => e.Name != item.Name);

Ну а дальше думайте как вам все это передать дальше и в каком типе

READ ALSO
CS0122: is inaccessible due to its protection level

CS0122: is inaccessible due to its protection level

Есть класс и код, взаимодействующий с нимПри сборке возникают ошибки непонятно по какой причине - все модификаторы установлены как public

82
Как объединить несколько архивов?

Как объединить несколько архивов?

Есть сервисы, которые пакуют zip архивыСервисы мои, т

174
WPF Прогресс Бар

WPF Прогресс Бар

Подскажите, я создал Progress Bar по паттерну MVVM в отдельной сборке, в View добавил DataContect -View Model и теперь мне нужно его подключить в другой сборке...

84