使用 LINQ 将一个列表复制到另一个列表和子列表

Joh*_*ann 4 c# linq linq-to-objects c#-4.0

我有一个员工列表,所有员工都有另一个嵌套列表,称为 EmployeeValuesCollection。

所以我的课是这样的:-

public Employee(int employeeID, string jobTitle, int companyID, 
        List<EmployeeValues> employeeValuesCollection)
{
      EmployeeID = employeeID;
      JobTitle = jobTitle;
      CompanyID = companyID;
      EmployeeValuesCollection = employeeValuesCollection;
 }
Run Code Online (Sandbox Code Playgroud)

现在我希望使用 LINQ 从另一个对象填充这个对象,到目前为止我已经:-

List<DataFileRow> dataFiles = dfRow.Rows;
dataFiles
     .ForEach(l => employeeList
                      .Add(new Employee(l.EmpID, l.JobTitle, l.CompID)));
Run Code Online (Sandbox Code Playgroud)

这是可行的,但我不知道如何在声明中添加employeeValuesCollection。可以做吗?

所以我在想:-

dataFiles
     .ForEach(l => employeeList
                     .Add(new Employee(l.EmpID, l.JobTitle, l.CompID, 
                          new List<EmployeeValuesCollection> .............)));
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助和时间。

小智 5

最好在 Employee 构造函数内迭代输入参数 employeeValuesCollection 列表,以创建 EmployeeValues 类型的局部变量并将其添加到 Employee 类的实例列表变量中。如果我们使用 EmployeeValuesCollection = employeeValuesCollection;,我们实际上是在分配引用。因此,如果我们修改employeeValuesCollection的某些值,相同的更改将反映到EmployeeValuesCollection。

public Employee(int employeeID, string jobTitle, int companyID, List<EmployeeValues> employeeValuesCollection)
    {
        EmployeeID = employeeID;
        JobTitle = jobTitle;
        CompanyID = companyID;

        foreach (var obj in employeeValuesCollection)
        {
            var empVal = new EmployeeValues() { Name = obj.Name};
            EmployeeValuesCollection.Add(empVal);
        }
Run Code Online (Sandbox Code Playgroud)

您可以使用 LINQ 语句作为

dataFiles.ForEach(l => employeeList.Add(new Employee(l.EmpID, l.JobTitle, l.CompID, l.EmployeeValuesCollection)));
Run Code Online (Sandbox Code Playgroud)