LINQ: Совокупные строки на основе словаря или сопоставления?

Я запускаю q запрос LINQ по списку SP, чтобы привлечь всех сотрудников, сколько предметов им принадлежит и общий процент.

Теперь я указал на ошибку в данных: в нескольких строках 3 пользователя указаны не как "фамилия, имя", а как домен \ имя пользователя. Мне нужно это несоответствия в данных сглажены.

Одна возможность - игнорировать все результаты, где имя содержит "домен \". Однако я хотел бы сопоставить эти 3 имени пользователя с их настоящими именами.

   domain\user1 => lastname, firstname
   domain\user2 => lastname, firstname
   domain\user3 => lastname, firstname

а затем объединить результат в строку "фамилия, имя" этого пользователя

Мой фактический код выглядит так:

public IEnumerable<EmployeeVM> GetAllEmployees()
    {
        EntityList<TicketsElement> Tickets = _db.GetList<TicketsElement>("Tickets");
        return Tickets.Where(b => b.BearbeiterID != null && b.BearbeiterImnName != String.Empty && b.BearbeiterImnName != null)
                      .GroupBy(b => b.BearbeiterImnName)
                      .OrderByDescending(b => b.Count())
                      .Select(b => new EmployeeVM() { Name = b.Key, val = b.Count() });

    }

Каков наилучший способ отобразить этих 3 пользователей и объединить соответствующие результаты?

С уважением

/edit: я добился небольшого прогресса. Я отредактировал GroupBy, чтобы отразить 1 пользователя.

.GroupBy(b => new { b.BearbeiterImnName, BearbeiterName = b.BearbeiterImnName == @"Domain\User1" ? "lastName, firstName" : b.BearbeiterImnName  })

Это возвращает пользователя дважды в списке, что означает, что мне просто нужно найти способ агрегирования строк с одним и тем же именем пользователя.

1 ответ

Вы можете попытаться ввести условное выражение в ваш выбор следующим образом:

.Select(b => new EmployeeVM() { Name = !b.Key.Contains("domain") ? b.key : Your new statement,  val = b.Count() });
Другие вопросы по тегам