我有两个类比如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属性。
谢谢
不能真正理解你想做什么。
,
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,你通常在应用程序启动时创建映射(Winforms上的但是作为Automapper的CreateMap方法不是线程安全的
Main
方法,或者web上的Global.asax
方法-两者都在单线程中执行)。此外,您总是可以用lock
语句包装映射创建,就像任何其他需要线程同步的代码一样。