如何将嵌套对象从一种类型转换为另一种类型

时间:2014-12-30 13:06:55

标签: c# linq lambda mapping

我有一个C#对象,其结构类似于

class Source 
{
    public int Id {get; set;}
    public List<Source> Children {get; set;}
}

我想将Source类型的对象(未知数量为Children)转换为Destination类型的对象

class Destination
{
    public int key {get; set;}
    public List<Destination> nodes {get; set;}
}

有没有办法可以使用LINQ执行此操作,或者我必须遍历所有并映射它。

3 个答案:

答案 0 :(得分:4)

你可以像这样做一些递归的事情:

public class Source
{
    public int Id { get; set; }
    public List<Source> Children { get; set; }

    public Destination GetDestination()
    {
        return new Destination
        {
            nodes = Children.Select(c => c.GetDestination()).ToList(),
            key = Id
        };
    }
}

答案 1 :(得分:0)

你可以这样做:

    List<A> alist = new List<A>();
    List<B> blist = alist.Select(a => new B()).ToList();


    public class A
    {}

    public class B
    {}

答案 2 :(得分:0)

也许尝试将一个构造函数添加到Destination类中,该类接受Source作为参数:

class Destination
{
    public int key {get; set;}
    public List<Destination> nodes {get; set;}

    public Destination(Source source)
    {
        Key = source.Id;
        Nodes = source.Select(s => new Destination(s)).ToList();
    }
}

然后做:

var destinations = sources.Select(s => new Destination(s)).ToList();

这可能会永远运行,但是没有尝试过。