2010-05-20 71 views
1

組我用下面的類訂購的記錄

class Country 
{ 
    string CtryID {get; set;} 
    List<City> city {get; set;} 
} 

class City 
{ 
    string county {get; set;}  
    int sqkm {get; set;} 
} 

我想訂購這樣

這裏的結果是國家和城市

國家

一些示例數據

美國
英國
加拿大

CityC
CityF
CityA
CityB
CityG
CityD
CityE

我要訂購按國家和其後市的記錄(假設一些城市屬於相應的國家)並且像這樣打印它們

加拿大 CityA CityB CityE

英國 CityG CityF

美國 CityC CityD

+0

什麼是數據源?城市列表?還是國家?看起來很奇怪的是,如果沒有檢查每個國家是否在該國的城市名單中,你無法從一個城市進入該國... – 2010-05-20 09:58:00

+0

沒有國家列表..如此新的國家(){CtryID =「US」,cty = new List {new City(){county =「CityF」,sqkm = 2803}, – Gokul 2010-05-20 10:01:34

+0

我有一個CountryList列表 countries = new List ()如果這不是正確的做法,那麼這些課程應該如何? – Gokul 2010-05-20 10:02:46

回答

1

這很大程度上取決於您使用如何顯示的技術。例如,您是否使用ASP.NET網站,Windows窗體或控制檯應用程序。您使用的是O/RM工具還是內存中的集合。這裏有一個例子使用內存中的對象,使用LINQ,在控制檯應用程序:

IEnumerable<Country> countries = GetCountries(); 

foreach (var country in countries.OrderBy(c => c.Name)) 
{ 
    Console.Write(country.Name + " "); 

    foreach (var city in country.Cities.OrderBy(c => c.Name)) 
    { 
     Console.Write(city.Name + " "); 
    } 

    Console.WriteLine(); 
} 

請注意,我改變了你的對象模型此。 A給予Country a Name財產,給予City a Name財產並將city財產更名爲Cities


你也可以這樣做:

var countriesNames = 
    from country in countries 
    order by country.Name 
    let cityNames = country.Cities.OrderBy(c => c.Name).ToArray() 
    select new 
    { 
     Name = country.Name 
     Cities = string.Join(" ", cityNames) 
    } 

foreach (var country in countriesNames) 
{ 
    Console.WriteLine(country.Name + " " + country.Cities); 
} 
+0

好的任何方式來避免LINQ中的foreach循環?並寫下來 - 來自Co在國家 來自ci in Co.City orderby Co.CtryID,ci.county – Gokul 2010-05-20 10:25:14

+0

我更新了答案,並添加了一個新的例子,顯示了一個沒有內置'foreach'的解決方案。 – Steven 2010-05-20 11:13:35

0

我不喜歡你的類結構和什麼約翰飛碟雙向說,在評論是正確的。你應該聽他的。他有很高的聲譽。:)

在你應該更改爲以下最起碼:如您在您的評論說

class Country 
{ 
    string CtryID {get; set;} 
    List<City> cities {get; set;} 
} 

class City 
{ 
    string CityID {get; set;} 
    int sqkm {get; set;} 

} 

填充(但將其更改爲一個數據庫或XML文件中的一些時間):

List<Country> countries = new List<Country> { new Country() { CtryID = "US", cities = new List<City> { new City() { CityID ="CityF", sqkm = 2803 },...etc 

然後,當你有一個人口稠密的對象圖執行下列操作讓你的輸出:

countries.ForEach(ctry => { 
    Console.Write(ctry.Name + " "); 
    foreach (var city in ctry.cities) 
    { 
     Console.Write(city.Name + " "); 
    } 
    Console.WriteLine(""); 
});