public class A
{
    public string Value1 { get; set; }
    public int Value2 { get; set; }
    public List<B> Values { get; set; }
    public int Value3 { get; set; }
}

public class B
{
    public int Id { get; set; }
    public string X { get; set; }
}

public class Result
{
    public string Value1 { get; set; }
    public int Value2 { get; set; }
    public string ValueB1X { get; set; }
    public string ValueB2X { get; set; }
    ...
    public string ValueBnX { get; set; }
    public int Value3 { get; set; }
}


我需要将A列表转换为结果列表。知道如何用LINQ做到吗?
基本上我需要的是:

A[0] = |Value1|Value2|Value2|
        B[0]
        B[1]
        B[2]

A[1] = |Value1|Value2|Value2|
        B[0]
        B[1]
        B[2]


转换成

              +------------------------------------------------------+
     rowA[0]  | Value1 | Value2 |  B[0].X | B[1].X | B[1].X | Value3 |
     rowA[1]  | Value1 | Value2 |  B[0].X | B[1].X | B[1].X | Value3 |

最佳答案

您需要知道有多少B,因为需要编写Result类以容纳该数量的项目。因此,这不是一个动态解决方案,无法像您所暗示的那样使用任何数量的B(1..n)

更好的设计是

public class Result
{
    public string Value1 { get; set; }
    public int Value2 { get; set; }
    public List<B> BValues { get; set; }
}


或者,假设B Id始终是唯一的,

public class Result
{
    public string Value1 { get; set; }
    public int Value2 { get; set; }
    public Dictionary<int, string> BValues { get; set; }
}


然后构造一个字典-

List<A> list = GetList();
List<Result> result = list.Select(a =>
    new Result()
    {
        Value1 = a.Value1,
        Value2 = a.Value2,
        BValues = a.Values.ToDictionary(b => b.Id, b => b.X)
    });

关于c# - 使用linq展平数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7479380/

10-09 13:34