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() });