2013-03-26 39 views
3

您好,我嘗試在C#中創建一個包含國家,城市和街道的列表。如何在C#中生成多維列表<

起初我使用SQL從3個不同的表中獲取數據。然後,我希望有一個列表,它看起來像這樣:

Germany 
     Frankfurt 
      Siemensweg 14 
     Berlin 
      Bernstr 4 

    USA 
     New York 
      Atlstr.24 
      Zumbastr. 45 
    Turkey 

這是我到目前爲止,但它不是按預期工作:

public class iOrt 
{ 
    public class ORT 
    { 
     public string RegionID { get; set; } 
     public string RegionName { get; set; } 
     public List<STADT> Stadt { get; set; } 

    } 

    public class STADT 
    { 
     public string Stadname { get; set; } 
    } 


    //SQL Verbindung wird ausgelesen 
    protected static string GetConnectionString() 
    { 
     return ConfigurationManager.ConnectionStrings["Bookit"].ConnectionString; 
    } 

    internal static List<ORT> Ort() 
    { 
     List<ORT> ortObject = new List<ORT>(); 
     List<STADT> stadtObject = new List<STADT>(); 

     ortObject.Add(new ORT { 
     RegionID="235", 
     RegionName="deutschland", 
     Stadt = stadtObject.Add(new STADT{ 

      Stadname="Frankfurt"}) 


     }); 

     return ortObject; 

    } 
+1

沒有「多維列表」,但是當您看看您在帖子頂部寫的內容時,很清楚您需要樹形結構。當然,如果樹的深度總是達到'街道',你可以用嵌套列表來完成。 – 2013-03-26 10:05:59

+0

目前還不清楚你想要達到的目標。爲什麼你需要那種列表?要顯示一些地址? – 2013-03-26 10:10:26

+0

爲什麼你需要一個多維列表?你可以簡單地使用3個'列表'。一個爲國家,一個爲城市,另一個爲街道。 每個對象包含以下屬性: 'int ID,string country/city/street' 然後,您可以簡單地使用LINQ來獲取任何你想要的。 – jAC 2013-03-26 10:11:31

回答

3
public class Street 
    { 
     public string Name { get; set; } 
    } 

    public class City 
    { 
     public string Name { get; set; } 
     public List<Street> Streets { get; set; } 
    } 

    public class Country 
    { 
     public string Name { get; set; } 
     public List<City> Cities { get; set; } 
    } 

    public static List<Country> Ort() 
     { 
      List<Country> countries = new List<Country>(); 
      countries.Add(new Country() 
      { 
       Name = "Country1", 
       Cities = new List<City>() 
       { 
        new City() 
        { 
         Name="City1", 
         Streets=new List<Street>() 
         { 
          new Street() 
          { 
           Name="Street 1" 
          }, 
          new Street() 
          { 
           Name="Street 2" 
          } 
         } 
        }, 
        new City() 
        { 
         Name="City2", 
         Streets=new List<Street>() 
         { 
          new Street() 
          { 
           Name="Street 1" 
          }, 
          new Street() 
          { 
           Name="Street 2" 
          } 
         } 
        } 
       } 
      }); 
      return countries; 

     } 
1

你需要組織你的數據。你爲什麼不使用類來這樣做。考慮下面

public class County 
{ 
    public string Name{get;set;} 
    public List<City> Cities{get;set;} 
} 

public class City 
{ 
    public string Name{get;set;} 
    public List<Region> {get;set;} 
} 

public class Region 
{ 
    public string Name{get;set;} 
    public int Code{get;set;} 
} 

,然後你可以有一個像

internal static List<Country> Ort() 
{ 
    Country country = new Country(); 
    Country.Name="Germany"; 
    Country.Cities = new List<City>(); 

    City city1 = new City(); 
    city1.Name="Frankfurt"; 
    city1.Regions = new List<Region>(); 

    Region region = new Region(); 
    region.Name = "Siemensweg"; 
    region.code = 14; 

    city1.Regions.Add(region); 

    region = new Region(); 
    region.Name = Bernstr; 
    region.Code = 4; 

    city1.Regions.Add(region); 

    country.Cities.Add(city1); 

    List<Country> countries = new List<Country>(); 
    countries.Add(country); 

    return countries; 

    //or you can make your classes in a loop on a table row collection 

} 
2

返回鄉村對象的列表的方法。國家對象包含城市對象的列表。城市對象包含地址對象列表等。

+0

你能舉個簡單的例子嗎? – 2013-03-26 10:10:56

2

您需要在此處創建不同的類。你需要爲Country,City,Street三個班級(或更多,取決於你的結構)。國家有一份城市名單,一個城市有一份街道名單。

public class Country 
{ 
    public string Name { get; set; } 
    public List<City> Cities { get; set; } 
} 

public class City 
{ 
    public string Name { get; set; } 
    public List<Street> Streets { get; set; } 
} 

public class Street 
{ 
    public string Name { get; set; } 
} 
2

您的對象初始化代碼不正確。應該是:

internal static List<ORT> Ort() 
{ 
    List<ORT> ortObject = new List<ORT>(); 

    ortObject.Add(new ORT 
        { 
         RegionID="235", 
         RegionName="deutschland", 
         Stadt = new List<STADT>() 
         { 
          new STADT { Stadname="Frankfurt" } 
         } 
        }); 

    return ortObject; 
} 
1

我想你的結構應該是這樣的:

public class Country { 
     public string CountryName { get; set; } 
     public List<CountryRegion> Regions { get; set; } 
} 

pulic class CountryRegion 
{ 
    public string RegionName { get; set; } 
    public List<Area> Areas { get; set; }  
} 

public class Area { 
    public string AreaName { get; set; } 
    public int Population { get; set; } 

} 

要獲取結構:

Germany 
    Frankfurt 
     Siemensweg 14 
    Berlin 
     Bernstr 4 

你可以這樣做:

var Germany = new Country(); 
    Germany.CountryName = "Germany"; 
    Germany.Regions = new List<CountryRegion>(); 

    var Siemensweg = new Area(); 
    Siemensweg.AreaName = "Siemensweg"; 
    Siemensweg.Population = 14; 

    var Bernstr = new Area(); 
    Bernstr.AreaName = "Bernstr"; 
    Bernstr.Population = 4; 

    Germany.Regions.Add(new CountryRegion { RegionName = "Siemensweg", new List<Area> { Siemensweg } }); 
    Germany.Regions.Add(new CountryRegion { RegionName = "Berlin", new List<Area> { Bernstr } });