Linq组+加入

时间:2013-01-27 16:13:53

标签: c# linq join linq-group

我已经阅读了其他一些问题,但无法从他们那里得到答案。

我是Linq的新手。我有3张桌子。

城市(身份证,姓名)

专业(身份证,姓名)

配额(id,cityId,specialId,qty)

所以,你有一个城市专业的配额。我想按城市列出这个列表。像这样:

城市:纽约

  • 专业A:15
  • 特产B:12
  • 特产C:10

城市:巴黎

  • speacialty A:10
  • speacialty B:8

等等。

有人可以帮我吗?

加起来

我并不是真的要求准备好代码。我想我应该更清楚。

我可以加入这些表格,我很困惑,我将如何按城市进行分组。

例如,这将加入所有内容

from cota in Cotas
join cidade in Cidades on cota.CidadeId equals cidade.Id
join especialidade in EspecialidadeMedicas on cota.EspecialidadeId equals especialidade.Id
select new { Qty = cota.Quantidade, City = cidade.Nome, Specialty = especialidade.Nome}

Obs:语言是葡萄牙语,我翻译了对象的创建,但Quantidade是Quantity,EspecialidadeMedica是医学专业,Cidade是City。

此查询的结果是:

Qty | City       | Specialty 

10    Campinas     Pediatria     

15    Campinas     Cardiologia

5     Campinas     Ortopedia     

10    Sumaré       Pediatria                                                                                                                                                                                                                                                       

15    Sumaré       Cardiologia                                                                                                                                                                                                                                                     

14    Hortolândia  Cardiologia                                                                                                                                                                                                                                                     

5     Hortolândia  Ortopedia   

我希望按城市分组,并且能够返回具有城市名称和具有专业和数量的列表的对象。

1 个答案:

答案 0 :(得分:0)

所以,我通过做更多研究得到了我所需要的东西。

实现我想要的代码是:

from cidade in Cidades
join lista in 
        (
            from cota in Cotas 
             join especialidade in EspecialidadeMedicas on cota.EspecialidadeId equals especialidade.Id
            select new {
                CidadeId = cota.CidadeId, CotaId=cota.Id, Quantidade=cota.Quantidade,
                EspecialidadeId=especialidade.Id, Especialidade=especialidade.Nome
            }
        ) on cidade.Id equals lista.CidadeId into listaCota
select new {CityId=cidade.Id, cityName=cidade.Nome, quotaList=listaCota}

这样我有以下几点:

Result from LinqPad 4