Групировка по нескольким фильтрам

135
12 февраля 2021, 07:20

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

var workers = new[]
{
    new Worker {Name = "Иванов", Salary = 40000},
    new Worker {Name = "Петров", Salary = 3000},
    new Worker {Name = "Иванов", Salary = 5000},
    new Worker {Name = "Сидоров", Salary = 7844},
    new Worker {Name = "Котельников", Salary = 1415},
    new Worker {Name = "Иванов2", Salary = 32970},
 };

Необходимо сделать группировку по одинаковым элементам, вот так:

var model = workers.GroupBy(x=>x.Name).Select(x=>new Element{...})

Здесь я сгруппирую элементы по Name индивидуально, но мне надо добавить фильтр который будет группировать например: Иванов + Иванов2, для другого элемента Сидоров + Котельников.

Возможно ли такое реализовать?

Answer 1

Можно использовать дополнительный словарь

var workers = new[]
{
    new Worker {Name = "Иванов", Salary = 40000},
    new Worker {Name = "Петров", Salary = 3000},
    new Worker {Name = "Иванов", Salary = 5000},
    new Worker {Name = "Сидоров", Salary = 7844},
    new Worker {Name = "Котельников", Salary = 1415},
    new Worker {Name = "Иванов2", Salary = 32970},
};
var dict = new Dictionary<string, string>() {
    {"Иванов","Group 1"},
    {"Иванов2","Group 1"},
    {"Сидоров","Group 2"},
    {"Котельников","Group 2"},      
};
var model = workers
            .GroupBy(x => dict.ContainsKey(x.Name) ? dict[x.Name] : x.Name)
            .Dump();

На выходе:

READ ALSO
Проиграть анимацию один раз

Проиграть анимацию один раз

Есть тип врага, подходя к которому, он должен выпускать в меня снаряд, соответственно должна проигрываться анимация атаки, потом задержка...

93
Отображение объекта

Отображение объекта

Есть часть кода игры типа Space Invaders:

107
C# Цикл For (при DataGridView)

C# Цикл For (при DataGridView)

Появилась проблема, есть код (ниже написан):

110
C# Получение Ip host mac локальной сети

C# Получение Ip host mac локальной сети

Нужно вывести все айдпи,хосты и мак адреса всей локальной сети

93