4

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

所以我的课是这样的:-

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

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

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

这可行,但是我不知道如何在语句中添加 employeeValuesCollection。有可能吗?

所以我在想这样的事情:-

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

感谢您的帮助和时间。

4

2 回答 2

4

最好在 Employee 构造函数中遍历输入参数employeeValuesCollection list 来创建一个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);
        }

您可以将 LINQ 语句用作

dataFiles.ForEach(l => employeeList.Add(new Employee(l.EmpID, l.JobTitle, l.CompID, l.EmployeeValuesCollection)));
于 2012-04-26T08:44:35.327 回答
1

您可以在每一行上使用 Linq 投影。我会在“正确”的 linq 中做到这一点:

employeeList = (from r in dfRow.Rows
  select new Employee(r.EmpID, r.JobTitle, r.CompID, 
   new List<EmployeeValues>(/*parameter*/))).ToList();

在您指定EmployeeValues实际是什么(以及从哪个属性DataFileRow访问它们)之前,很难再说什么。但是假设它只是更多的属性,我总结它们就像键/值对(尽管类型上的名称是复数形式,这有点令人困惑)。

我从您对问题的第三条评论中获取了此处的名称,并假设该DataFileRow类型将这些值公开为一个名为 的 IEnumerable EmployeeValues。基于此 - 您可以使用内部投影。

employeeList = (from r in dfRow.Rows
  select new Employee(r.EmpID, r.JobTitle, r.CompID, 
   new List<EmployeeValue>((from v in r.EmployeeValues
    select new EmployeeValues(v.title, v.value, v.isVisible))).ToList());
于 2012-04-26T08:52:31.597 回答