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 |
答案 0 :(得分:1)
您需要知道您将拥有多少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)
});