将数据分配给Linq中另一个list的子列表

本文关键字:list 列表 另一个 数据 分配 Linq | 更新日期: 2023-09-27 17:51:07

我有两个类比如ParentClass和ChildClass

public class ParentClass 
{
   public int Property1 {get; set;}
   public List<Child> {get; set;}
}
public class ChildClass
{
   public int Property1 {get; set;}
   public string Property2 {get; set;}
}
现在我有了一个父类 的对象
// in my case all data has been assign to parent object properties except List<ChildClass>
List<ParentClass > parent = data

如何在不使用循环的情况下将数据分配给父列表的List属性。

谢谢

将数据分配给Linq中另一个list的子列表

不能真正理解你想做什么。

,

var parent = data.Select(p => new ParentClass{Property1 = p.Property1}).ToList();

你会得到数据的副本,但是List属性将不会被复制。

LINQ (Language-Integrated Query)用于查询。而查询是一件不应该产生副作用的事情。修改对象纯粹是一种副作用。所以Linq在这里是不合适的工具。更重要的是,在LINQ内部使用循环,所以也不会有任何性能上的好处。

建议-使用简单的循环来更新你的对象-这是非常简单的结构,很容易理解:

foreach(var parent in parents)
   parent.Children = GetChildren(parent.Id);
如果没有显式循环,可以使用List.ForEach:
parents.ForEach(p => p.Children = GetChildren(parent.Id));

但是我不喜欢这种方法——如果你可以使用foreach,为什么要写像foreach一样的东西呢?另外,引入lambda会增加系统的复杂性。


但是作为Automapper的CreateMap方法不是线程安全的

使用Automapper,你通常在应用程序启动时创建映射(Winforms上的Main方法,或者web上的Global.asax方法-两者都在单线程中执行)。此外,您总是可以用lock语句包装映射创建,就像任何其他需要线程同步的代码一样。