什么都没有添加到“对象”列表

时间:2019-03-21 11:00:54

标签: c# list linq

我有一个对象列表,我只想向其中添加一个新对象,如果该列表中尚未包含具有匹配属性的对象,这就是我要这样做的方式:

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(它是一个整数)。我从到别处的字符串中提取数字并将其解析为一个整数。然后是if语句。在这里,我要检查列表是否已经包含这些属性。本质上,我想要的是只添加一个员工一次,然后该员工可以有多个AvailableFor,即几周,尽管一次只能是同一周。因此,示例如下:

> Employee1

Week 11

Week 12

Week 13

因此,没有雇员姓名两次,每个雇员每周两次都没有。不过,多名员工的周数可以相同,因此第一和第二名员工都具有相同的周数。

运行上面的代码时,我什么也没得到,也没有任何添加。我可能做错了什么?

2 个答案:

答案 0 :(得分:2)

像您一样进行两次.Any()通话将独立检查这两个通话,即它们不必属于同一预订。为您的if语句尝试

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

应该做到这一点,以便相同的保留必须与AvailableFor和EmployeeName上的不匹配

答案 1 :(得分:2)

您的if语句不正确:

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

您要说的是,是否有任何项目的AvailableFor与WeekNumber不匹配,并且任何项目的员工姓名不等于员工姓名值。

您需要将它们结合起来。

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

这样,您将只检查每个单独的项目以查看它们是否匹配。