gpt4 book ai didi

c# - 将 Let 与 LINQ 结合使用时如何避免重新创建对象

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:34 25 4
gpt4 key购买 nike

这是我的数据:

private List<Department> Data
{
get
{
return new List<Department>
{
new Department{
Id = 1,
Name = "Tech",
Employees = new List<Employee>{
new Employee{Name = "x", Id = 1 },
new Employee{ Name = "y", Id = 2}
}
},
new Department{
Id = 2,
Name = "Sales",
Employees = new List<Employee>{
new Employee{Name = "a", Id = 3},
new Employee {Name = "b", Id = 4}
}
}
};
}
}

在这里,我得到了所有员工及其相应部门的列表:

List<Employee> employees = (from department in Departments
let d = department
from e in d.Employees
select new Employee{
Id = e.Id,
Name = e.Name
Department = d
}).ToList();

令我困扰的是,我必须重新创建我的 Employee 对象才能将适当的部门附加到它。有没有一种方法可以在不必重新创建 Employee 的情况下编写 LINQ 语句?

可能有更好的方式来表达这个问题——如果有的话请随时告诉我。

编辑我走这条路的原因是我通过序列化我的部门来存储我的数据:

[
{
"Id":1,
"Name":"Sales",
"Employees":[{"Id":2,"Name":"x"},{"Id":1,"Name":"y"}]
},
{
"Id":2,
"Name":"Tech",
"Employees":[{"Id":3,"Name":"d"},{"Id":4,"Name":"f"}]
}

]

最佳答案

看起来您想使用 LINQ 来更新实例。这不是预期用途。使用 LINQ 查询您想要拥有的实例,然后循环更新结果。 (非嵌套)循环不是邪恶的。

var query = 
from d in Departments
from e in d.Employees
select new { Employee = e, Department = d };

foreach(var x in query)
{
x.Employee.Department = x.Department;
}

关于c# - 将 Let 与 LINQ 结合使用时如何避免重新创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17723607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com