Оптимизация итерации цикла пропуска фрагмента кодаC#

Место общения программистов C#
Ответить
Anonymous
 Оптимизация итерации цикла пропуска фрагмента кода

Сообщение Anonymous »

У меня есть метод ниже для получения данных о группах пользователей. Список идентификаторов, которые я передаю, выглядит следующим образом:
Ввод:

Код: Выделить всё

var list = new List { 1002, 1004, 1006, 1008 };
Метод:

Код: Выделить всё

public async Task GetUserGroups(List userId)
{
var groups = await _userRepository.GetUserGroupsToDownload();
var userGroups = await _userRepository.GetUserGroupsToDownload(userId);

List aLst = new List();
List ids = new List();

//Found ids from userGroups and add it to a list
foreach (var group in userGroups)
{
var result = new UserGroupDto();
result.GroupId = group.GroupId;
result.Id = group.UserId;
result.EnterpriseId = group.EnterpriseId;
result.Name = groups.Where(c => c.Id == group.GroupId).FirstOrDefault().Name;
result.Enabled = userGroups.Any(ug => ug.GroupId == group.GroupId);

aLst.Add(result);
ids.Add(group.UserId); //Keeping track ids that are found to eliminate in the second loop
}

//Add ids in the list that aren't in the userGroups
foreach (var id in userId.Where(c => !ids.Contains(c)))
{
var result = new UserGroupDto();
result.GroupId = 0;
result.Id = id;
result.EnterpriseId = 0;
result.Name = "";
result.Enabled = false;

aLst.Add(result);
}

return ResponseBase.WithSuccess().WithData(aLst);
}
Теперь дело в том, что, например, если группы найдены для 1002, 1004, то одновременно мне нужно получить данные для 1006 и 1008, хотя их нет принадлежать к какой-либо группе. Для этого у меня есть второй цикл, который я не предпочитаю использовать. Итак, есть ли какой-нибудь альтернативный или немного более быстрый способ устранить второй цикл и назначить значения по умолчанию тем идентификаторам, которым не назначена какая-либо группа?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -iteration
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»