Обновить список из другого списка с помощью сопоставления значений с помощью Linq - PullRequest
2 голосов
/ 13 июня 2019

Я хочу обновить значения в списке, когда я запрашиваю контекст из другого источника

Я могу найти совпадения с помощью 2 разных стилей запросов

var r = from aa in context.Persons.GetItems()
        join bb in findPersonViewModel.findPersonResultsViewModel on aa.PersonId equals bb.PersonID
        select aa;

OR

var results = context.Persons.GetItems().Where(ax => findPersonViewModel.findPersonResultsViewModel.Any(b => ax.PersonId == b.PersonID));

Для простоты я сократил модели

public class FindPersonResultsViewModel
{
    public int PersonID { get; set; }
    public bool ExistInContactManager { get; set; }
    public bool ActionType { get; set; }
}

public class PersonViewModel
{
     public int PersonID { get; set; }
}

Цель: если PersonID совпадает, то обновите FindPersonResultsViewModel, чтобы оба значения ExistinContactManager и ActionType были True

Вот пример данных для визуального

var findPersonResultsViewModel = new List<FindPersonResultsViewModel>()
    { new FindPersonResultsViewModel { PersonID = 2, ActionType = false, ExistInContactManager = false },
      new FindPersonResultsViewModel { PersonID = 3, ActionType = false, ExistInContactManager = false },
      new FindPersonResultsViewModel { PersonID = 4, ActionType = false, ExistInContactManager = false },
      new FindPersonResultsViewModel { PersonID = 5, ActionType = false, ExistInContactManager = false },
      new FindPersonResultsViewModel { PersonID = 6, ActionType = false, ExistInContactManager = false },
    };



var personModel = new List<PersonViewModel>()
    { new PersonViewModel { PersonID = 2 },
      new PersonViewModel { PersonID = 6 },
      new PersonViewModel { PersonID = 8 },
      new PersonViewModel { PersonID = 9 },
      new PersonViewModel { PersonID = 12 },
      new PersonViewModel { PersonID = 22 },
      new PersonViewModel { PersonID = 32 },
      new PersonViewModel { PersonID = 42 },
    };

1 Ответ

1 голос
/ 13 июня 2019

Если я понимаю, что вы спрашиваете ... Вы можете просто использовать Contains и foreach

var ids = personModel.Select(x => x.PersonID);

var results = findPersonResultsViewModel.Where(x => ids.Contains(x.PersonID));

foreach (var item in results)
{
   item.ActionType = true;       
   item.ExistInContactManager = true
}

db.SaveChanges();

Или вы можете сохранить себя в оба конца, просто используя Join, и обновить, используя foreach

var results =
   from pr in findPersonResultsViewModel
   join p in personModel on pr.PersonID equals p.PersonID
   select pr;

foreach (var item in results)
{
   item.ActionType = true;
   item.ExistInContactManager = true;
}

db.SaveChanges();

Выход

PersonID : 2, ActionType :True, ExistInContactManager :True
PersonID : 3, ActionType :False, ExistInContactManager :False
PersonID : 4, ActionType :False, ExistInContactManager :False
PersonID : 5, ActionType :False, ExistInContactManager :False
PersonID : 6, ActionType :True, ExistInContactManager :True

Полная демонстрация здесь

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