2017-11-23 3 views
1

ich Dataset bekommen, die Datentabellen enthält, dieVerschachtelte Datentabelle auf verschachtelte Liste

1,2 oder 4 sein kann ich, dass in der Liste Klasse bin zu übersetzen, die wie unten aussieht.

public class test 
    { 
      public int id { get; set; } 
      public int name { get; set; } 
      public List<test> LstTest {get;set;} 
    } 

Zum Beispiel, wenn ich 3 Datentabellen in Datensatzes erhalten, ich bin Liste der Test-Klasse von der ersten Datentabelle erstellen annehmen, die eine weitere Liste (LstTest), die aus Datentabelle 2 und wieder jedes Objekt zu bevölkerten muss enthält in dieser Liste enthält LstTest, die aus Datentabelle 3 aufgefüllt werden muss.

Können Sie mir bitte eine Lösung dafür bereitstellen. Ich bin in der Lage, dies statisch zu tun, aber das Problem ist, dass dies dynamisch sein muss, da die Anzahl der Datentabellen beliebig sein kann, z. 2,3,4 usw.

Jede Hilfe wird wirklich geschätzt.

Antwort

0

Nicht getestet, sollte aber funktionieren, wenn ich Ihre Anforderung richtig verstanden:

public static List<test> GetTestLists(DataSet ds) 
{ 
    var allLists = new Dictionary<int, List<test>>(); 

    // reverse loop necessary for efficient algorithm 
    for (int i = ds.Tables.Count -1; i >= 0; i--) 
    { 
     List<test> childList; 
     bool hasChildren = allLists.TryGetValue(i + 1, out childList); 
     var testList = new List<test>(); 
     DataTable tbl = ds.Tables[i]; 

     foreach (DataRow row in tbl.Rows) 
     { 
      var t = new test 
      { 
       id = row.Field<int>("Id"), 
       name = row.Field<int>("name") // int for name ?? 
      }; 
      if (hasChildren) 
       t.LstTest = childList; 
      testList.Add(t); 
     } 
     allLists.Add(i, testList); 
    } 

    return allLists.TryGetValue(0, out List<test> parentList) ? parentList : null; 
} 

ich int name erraten string name sein sollte. Wenden Sie auch .NET capitalization conventions an.