我有一个对象列表,我只想向其中添加一个新对象,如果该列表中尚未包含具有匹配属性的对象,这就是我要这样做的方式:
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
因此,没有雇员姓名两次,每个雇员每周两次都没有。不过,多名员工的周数可以相同,因此第一和第二名员工都具有相同的周数。
运行上面的代码时,我什么也没得到,也没有任何添加。我可能做错了什么?
答案 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())))
这样,您将只检查每个单独的项目以查看它们是否匹配。