Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分组子群_C#_.net_Linq_Igrouping_Nested Groups - Fatal编程技术网

C# 分组子群

C# 分组子群,c#,.net,linq,igrouping,nested-groups,C#,.net,Linq,Igrouping,Nested Groups,如何将子组分组以创建大陆列表,其中每个大陆都有自己的县,每个国家都有自己的城市,如下表所示 以下是t-sql: select Continent.ContinentName, Country.CountryName, City.CityName from Continent left join Country on Continent.ContinentId = Country.ContinentId left join City on Country.CountryId = City.

如何将子组分组以创建大陆列表,其中每个大陆都有自己的县,每个国家都有自己的城市,如下表所示

以下是t-sql:

select Continent.ContinentName, Country.CountryName, City.CityName 
from  Continent
left join Country
on Continent.ContinentId = Country.ContinentId

left join City
on Country.CountryId = City.CountryId
以及t-sql的结果:

我尝试了这个方法,但它以错误的方式对数据进行分组,我需要按照上表的方式进行分组

  var Result = MyRepository.GetList<GetAllCountriesAndCities>("EXEC sp_GetAllCountriesAndCities");

    List<Continent> List = new List<Continent>();


    var GroupedCountries = (from con in Result
                             group new
                             {


                                 con.CityName,

                             }

                             by new
                             {

                                 con.ContinentName,
                                 con.CountryName
                             }

            ).ToList();

    List<Continent> List = GroupedCountries.Select(c => new Continent()
    {

        ContinentName = c.Key.ContinentName,
        Countries = c.Select(w => new Country()
        {
            CountryName = c.Key.CountryName,

            Cities = c.Select(ww => new City()
            {
                CityName = ww.CityName
            }
            ).ToList()

        }).ToList()


    }).ToList();
var Result=MyRepository.GetList(“EXEC sp_getallcountriesandcity”);
列表=新列表();
var GroupedCountries=(来自结果中的con
集团新
{
con.CityName,
}
由新
{
犯人姓名,
con.CountryName
}
).ToList();
List=GroupedCountries.Select(c=>new contricent()
{
大陆名称=c.Key.columentName,
Countries=c.Select(w=>newcountry()
{
CountryName=c.Key.CountryName,
Cities=c.Select(ww=>newcity()
{
CityName=ww.CityName
}
)托利斯先生()
})托利斯先生()
}).ToList();

您应该应用两次分组

var grouped = Result
    .GroupBy(x => x.CountryName)
    .GroupBy(x => x.First().ContinentName);

var final = grouped.Select(g1 => new Continent
{
    ContinentName = g1.Key,
    Countries = g1.Select(g2 => new Country
    {
        CountryName = g2.Key,
        Cities = g2.Select(x => new City { CityName = x.CityName }).ToList()
    }).ToList()
});

您需要按大陆、国家和城市对所有事物进行分组:

List<Continent> List = MyRepository.GetList<GetAllCountriesAndCities>("EXEC sp_GetAllCountriesAndCities")
    .GroupBy(x => x.ContinentName)
    .Select(g => new Continent 
    {
        ContinentName = g.Key,
        Countries = g.GroupBy(x => x.CountryName)
                     .Select(cg => new Country 
                     {
                         CountryName = cg.Key,
                         Cities = cg.GroupBy(x => x.CityName)
                                    .Select(cityG => new City { CityName = cityG.Key })
                                    .ToList()
                     })
                     .ToList()
    })
    .ToList();
List List=MyRepository.GetList(“EXEC sp_getallcountriesandcity”)
.GroupBy(x=>x.name)
.选择(g=>新大陆
{
名称=g.键,
Countries=g.GroupBy(x=>x.CountryName)
.选择(cg=>新国家/地区
{
CountryName=cg.Key,
Cities=cg.GroupBy(x=>x.CityName)
.Select(cityG=>newcity{CityName=cityG.Key})
托利斯先生()
})
托利斯先生()
})
.ToList();

我知道这很古老,但我想说的是,对于每个microsoft来说,一种更简单、可读性更强的方法。虽然这是一个只有两个级别的示例,但它很可能适用于到达此页面的其他人(如我)

有关文件载于 并以一个学生对象为例


我想提一提的是,他们用于打印的方法比仅在您的大陆对象上创建快速打印功能更难

它以错误的方式分组?在什么方面是错误的?我甚至没有在t-SQL中看到GroupBy。我认为您必须在第一组的投影中再次分组:
Result.GroupBy(x=>x.groupName)。选择(g=>g.GroupBy(x=>x.CountryName))
@TimSchmelter,是的。。我想像这个大陆-->国家-->City@juharr...thank非常感谢你的帮助:)。我是林克集团的。。。按sql分组是否更好?如果是,请编写简单的代码,告诉我如何做到这一点…它工作了,非常感谢:)。。。但是我不理解var grouped=Result.GroupBy(x=>x.CountryName).GroupBy(x=>x.First().groupname);你能告诉我一个更简单的分组方法吗?类似于我在代码中使用的东西。。。谢谢谢谢你,蒂姆!你总是帮助我,我的好朋友!!这正是我想要的。您如何看待使用Linq进行分组,这样可以吗?还是应该使用sql server而不是Linq进行分组?我的另一个问题是:我是一名新的开发人员,你对我成为真正专业的开发人员有什么建议:)?我花了两天时间研究如何在sql server中对其进行分组,但找不到任何有用的文章,即使在数据库中进行分组,也不会得到嵌套结构,因此您当前的方法很好。另一种方法是按大陆、国家和城市对数据库中的结果集进行排序。然后,一个简单有效的循环就足够创建您的列表了。您可以开始用您已经知道的内容帮助stckoverflow中的其他人。通过这种方式,你学到了很多,因为你必须思考这个问题,你可能会得到其他更好的答案,向你展示不同的方法。因此,将您的首选标签添加到问题过滤器中,您会立即看到新的问题,您可能会回答这些问题。嗨,蒂姆:),您能帮我解决这个问题吗?非常感谢。
 var queryNestedGroups =
        from con in continents
        group con by con.ContinentName into newGroup1
        from newGroup2 in
            (from con in newGroup1
             group con by con.CountryName)
        group newGroup2 by newGroup1.Key;