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

时间:2014-03-20 07:32:17

标签: c# linq collections

我有2个类可以说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属性。

由于

2 个答案:

答案 0 :(得分:0)

无法真正理解你想做什么。

可能,

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

您将获得数据副本,但List&lt; Child&gt;财产不会被复制。

答案 1 :(得分:0)

LINQ(语言集成查询)用于查询。查询是一个不应该引起副作用的事情。修改对象是一种纯粹的副作用。所以,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语句包装地图创建,就像需要线程同步的任何其他代码一样。