2011-09-20 34 views
2
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完成? 基本上我需要的是這樣的:使用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 | 
+2

總是會有'B'列表中的三個項目? – SimonC

回答

1

你需要知道你有多少B有,因爲Result類需要編寫,以適應該數量的項目。因此,這不是一個動態的解決方案,將工作任何數量的B像你似乎暗示(1..1)

一個更好的設計是

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

,或者假設BId s爲總獨特,

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) 
    }); 
+0

您的結果類看起來與我開始的類A非常相似。 (現在除了它的一個詞典)。 另外我不需要B類ID,只需Xs。 (爲了證明B是複雜的類,我添加了ID) 我真正需要的是B類的列表,它們被分離爲變量並添加到結果中的類A中。 結果類可以是匿名的。 –

+0

您不能以強類型語言動態創建具體類型。您可以輕鬆將所有X放入集合 - 列表,字典等 - 但您無法動態創建屬性。對你來說一個很好的問題是**爲什麼**?你打算如何使用這個'Result'對象? –