Ничего не добавляется в список объектов - PullRequest
2 голосов
/ 21 марта 2019

У меня есть список объектов, в которые я хочу добавить только новый объект, если в списке еще нет объекта с подходящими свойствами, вот как я пытаюсь это сделать:

reservation = new ForecastReservationAssignees();


string extractWeekNumber = Regex.Match(weekNumberValue.Value.ToString(), @"\d+").Value;

int weekNumber = Int32.Parse(extractWeekNumber);


if ((reservationAssigneeList.Any(i => i.AvailableFor != weekNumber))
    && (reservationAssigneeList.Any(i => i.EmployeeName != employeeNameValue.Value.ToString())))
{
    reservation.AvailableFor = weekNumber;


    // Add it.
    reservation.EmployeeName = employeeNameValue.Value.ToString();
    // Add object.
    reservationAssigneeList.Add(reservation);
}

Сначала я создаю новый объект, который имеет свойства EmployeeName, строку и AvailableFor, которая является целым числом.Я извлекаю число из строки, которую я получил в другом месте, и анализирую число в int.Затем следует заявление if.Здесь я хочу проверить, содержит ли список эти свойства.По сути, я хочу добавить сотрудника только один раз, и тогда у этого сотрудника может быть несколько AvailableFor, то есть недели, хотя одна и та же неделя один раз.Пример может быть таким:

> Employee1

Week 11

Week 12

Week 13

Таким образом, нет имени сотрудника дважды, и нет недели дважды для каждого сотрудника.Однако недели могут быть одинаковыми для нескольких сотрудников, поэтому первый и второй сотрудники имеют одинаковую неделю.

Когда я запускаю приведенный выше код, я ничего не получаю, вообще ничего не добавляется.Что я могу делать не так?

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Ваше if утверждение неверно:

if ((reservationAssigneeList.Any(i => i.AvailableFor != weekNumber)) && (reservationAssigneeList.Any(i => i.EmployeeName != employeeNameValue.Value.ToString())))

Вы говорите, что ЛЮБЫЙ элемент имеет пункт «Доступен», не соответствует номеру недели, И любой элемент имеет имя сотрудника, которое не соответствуетравно значению имени сотрудника.

Вам необходимо объединить их.

if ((reservationAssigneeList.Any(i => i.AvailableFor != weekNumber && i.EmployeeName != employeeNameValue.Value.ToString())))

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

2 голосов
/ 21 марта 2019

Выполнение двух .Any() вызовов, таких как вы, проверит два независимо, т. Е. Они не обязательно должны быть частью одного и того же бронирования. Попробуйте это для своего заявления if

if (reservationAssigneeList.Any(i => (i.AvailableFor != weekNumber) && (i.EmployeeName != employeeNameValue.Value.ToString()) ) )
{

Это должно сделать так, чтобы одно и то же резервирование должно совпадать и не совпадать в AvailableFor и EmployeeName

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