订购记录组

时间:2010-05-20 09:54:26

标签: c# linq

我正在使用以下课程

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

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

我想点这样的结果

以下是国家和城市的一些示例数据

国家

US
英国
加拿大

城市

CityC
CityF
CityA
CityB
CityG
CityD
CityE

我想按国家/地区和城市(假设某些城市属于相应的国家/地区)订购记录并按此打印

加拿大 CityA CityB CityE

UK CityG CityF

US CityC CityD

等等

2 个答案:

答案 0 :(得分: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 Name个属性,给了City 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);
}

答案 1 :(得分:0)

我不喜欢你的班级结构,John Skeet在评论中说的是真的。你应该听他的。他有很高的声誉。 :)

至少你应该改为:

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("");
});
相关问题