【问题标题】:How Add value to Object Property within a List<>如何为 List<> 中的对象属性添加值
【发布时间】:2014-12-21 02:55:34
【问题描述】:

仍然是初学者,所以请在这方面与他们坦诚相待。我希望能够在列表区分存在重复值后向我的属性添加数字值。

例如,两个用户在系统中输入了他们具有相同的员工 ID 001,列表允许他们都进入,然后应用条件来检查列表是否有任何重复项,因此在这种情况下会有。现在这个条件为真,将 1 添加到该属性,所以最后一个员工现在的员工 ID 为 002。

我相信 LINQ 很可能会参与此过程,但不确定如何进行。我知道我还必须在执行此操作后更新我的列表,以在整个程序中保持属性状态。

提前感谢希望一切都清楚,再次提问如何为列表中的属性添加价值

代码片段如下。

Employee = new Employee(employeeFirstName, employeeLastName,001); // Hard coded for sake of example. 

EmployeeList.AddEmployee(Employee);

员工列表类

public static void AddEmployee(Employee employee)
{

   employees.Add(new Employee(employee.FirstName,employee.LastName,employee.EmployeeID)); 
   employees.Add(new Employee("John", "Jones", 001));    

}

public void employeeIdValidation()
{
  if (employees.Count() != employees.Select(x => new {staffId = x.EmployeeID }).Distinct().Count())
  {
     Console.WriteLine("Every Book and Category should be unique");
     // employee ID increments by 1 
     // update List

  }
  else
  {
    Console.WriteLine("No duplicate found");
  }
}

public static List<Employee> GetEmployeeList()
{
  return employees; // With the updated EmployeeID 
}

【问题讨论】:

  • 您使用什么作为后端来存储数据?通常,ID 不是由用户提供,而是在插入记录时由数据库本身提供。
  • 它只是存储在列表中,是的,我完全同意你的观点,但是在这个程序中它将由用户自己提供。

标签: c# linq properties


【解决方案1】:

恕我直言,您应该使用Dictionary&lt;int, Employee&gt;(其中键是ID)而不是list。这将迫使您在添加到集合之前更新重复记录的 ID,并节省一大堆麻烦和计算。

【讨论】:

  • 感谢您的建议,如果我继续与这里的列表作斗争,我肯定会使用字典继续前进,因为它看起来很合乎逻辑。
  • 这也是为了性能,通过key查找记录在字典中要快得多。
【解决方案2】:

要在您的列表中查找具有相同 ID 的员工,您可以使用此 linq 函数。

var result=employees.ToLookup(e => e.Id);

通过这种方式,您可以对具有相同 ID 的员工进行分组。然后,您可以对具有相同 ID 的每组员工进行迭代,如下所示:

 foreach (IGrouping<int, Employee> group in result)
 {
     //More than 2 employees with the same Id
     if (group.Count()>1)
     {
       foreach (Employee employee in group)
       {
           //Change your ids here
       }
     }         
 }

[更新 1]: 要更改我建议的 ID,您首先要找到最大 ID,然后再在组中迭代。

  int nextID = result.Max(e => e.Key)+1;

然后,将第二个 foreach 循环更改为 for 循环,如下所示。当你发现一个组有两个以上的员工具有相同的 id 时,不要改变第一个元素,这样改变其余的:

//The first element don't change the id, start for the second element
for (int j = 1; j < group.Count(); j++)
{
   var currentEmployee=group.ElementAt(j);
   // Change the id and refresh the nextID variable
   currentEmployee.Id = nextID++;
}

【讨论】:

  • 谢谢,这很完美,但是我将如何更改 ID 属性,我尝试了以下,int value = 1;员工.员工ID + 价值; ..显然没有运气,如果你能指出我一个很好的方向:) 提前感谢
  • 别无他法,你的男人!我打算继续使用 get Enumerator 并调用 last 方法来仅更改对象上的最后一个属性(希望仍然学习正确的对话仍然有意义)
猜你喜欢
  • 2017-09-20
  • 2015-11-15
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2022-08-04
  • 2016-07-31
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多