C# 使用ValueInjector或AutoMapper展平集合

C# 使用ValueInjector或AutoMapper展平集合,c#,automapper,valueinjecter,C#,Automapper,Valueinjecter,给定以下示例类: public class OrderHeader { public int OrderHeaderId { get; set; } public string CustomerName { get; set; } } public class OrderItem { public int OrderHeaderId { get; set; } public int OrderItemId { get; set; } public str

给定以下示例类:

public class OrderHeader
{
    public int OrderHeaderId { get; set; }
    public string CustomerName { get; set; }
}

public class OrderItem
{
    public int OrderHeaderId { get; set; }
    public int OrderItemId { get; set; }
    public string ProductName { get; set; }
    public float Price { get; set; }
}

// Order contains the header information and a collection of items ordered
public class Order
{
    public OrderHeader Header { get; set; }
    public IEnumerable<OrderItem> Items { get; set; }
}

// LineItem is OrderHeader and OrderItem flattened out
public class LineItem
{
    public int OrderHeaderId { get; set; }
    public int OrderItemId { get; set; }
    public string CustomerName { get; set; }
    public string ProductName { get; set; }
    public float Price { get; set; }
}
2个问题:

上述模式是否正确/有效地使用ValueInjector将订单集合展平为行项目集合?如果没有,还有什么选择?除了不使用ValueInjector扩展方法和仅使用单个for-each循环将Header和OrderItem注入到展开的LineItem中之外 当使用AutoMapper时,是否有一个等价物?
@ChuckNorris-IIRC,你是ValueInjecter的作者之一?如果是这样,请随时发布答案,我会接受。@ChuckNorris如果你不介意,可以回答这个问题吗@ChuckNorris-IIRC,你是ValueInjector的作者之一?如果是的话,请随意发布一个答案,我会接受。@ChuckNorris如果你不介意的话,你能回答这个问题吗
var orders = new List<Order>();

var lineItems = new List<LineItem>();

// -extension method for collections with ValueInjector
// -project all the OrderItems into a single list
lineItems.InjectFrom( orders.SelectMany( x => x.Items ) );

// inject the header information into the flattened out LineItem objects
foreach( LineItem item in lineItems )
{
    var order = orders.Single( x => x.Header.OrderHeaderId == item.OrderHeaderId );
    item.InjectFrom( order.Header );
}