Rejoignez le retour de plusieurs colonnes et en utilisant le groupe de par Entity Framework

0

La question

Je suis en train de construire cette requête Entity Framework retour des quatre colonnes:

Cidade = a.Nome, Estado = b.Uf, TemperaturaMinima = d.TemperaturaMinima, TemperaturaMaxima = d.TemperaturaMaxima

Mais je ne veux pas la Cidade de la colonne de répétition. Donc je ne sais pas comment utiliser Group by juste dans la Cidade de colonne et de retourner tous les quatre colonnes.

Pourriez-vous m'aider?

`var cidadesMaisFrias = (from a in _contexto.Cidades
                                join b in _contexto.Estados
                                on a.EstadoId equals b.Id
                                join d in _contexto.PrevisaoClimas
                                on a.Id equals d.CidadeId
                                where d.DataPrevisao >= DateTime.Parse("23/11/2021") &&
                                d.DataPrevisao <= DateTime.Parse("29/11/2021")
                                orderby d.TemperaturaMinima ascending

                                select new
                                {
                                    Cidade = a.Nome,
                                    Estado = b.Uf,
                                    TemperaturaMinima = d.TemperaturaMinima,
                                    TemperaturaMaxima = d.TemperaturaMaxima
                                }).Take(3).ToList();`
entity-framework linq sql-server
2021-11-24 02:58:26
1

La meilleure réponse

0

Salut :) j'espère que j'ai compris de votre exigence correctement - vous voulez le trouver 3 plus froid des villes que vous avez dans la base de données, droit? Voici mon point de vue. En gros, j'ai juste changé les rejoindre pour rejoindre le groupe, donc il y a une entrée pour chaque ville au lieu de dupliquer les entrées. Aussi, j'ai déplacé le tri à la fin.

    var minDate = DateTime.Parse("23/11/2021");
    var maxDate = DateTime.Parse("29/11/2021");
    var toTake = 3;
        
    var cidadesMaisFrias = _contexto.Cidades.Where(c => true) // select all cities, no filter
            .GroupJoin(_contexto.Estados,
                c => c.EstadoId,
                e => e.Id,
                (c, e) => new { Citade = c, Estado = e } // here you get Citade with list of it's Estados (shoudl be one Estado)
                )
            .GroupJoin(_contexto.PrevisaoClimas,
                ce => ce.Citade.Id,
                pc => pc.CidadeId,
                (ce, pc) =>
                    new
                    {
                        Citade = ce.Citade.Nome,
                        Estados = ce.Estado.First().Uf,
                        TemperaturaMinima = pc.Where(x=>  x.DataPrevisao >= minDate && x.DataPrevisao <= maxDate).Min(x=>x.TemperaturaMinima), // first filter forecasts by date, then get smallest temperature
                        TemperaturaMaxima = pc.Where(x=>  x.DataPrevisao >= minDate && x.DataPrevisao <= maxDate).Max(x=>x.TemperaturaMaxima) // first filter forecasts by date, then get highest temperature
                    }
                )
            .OrderBy(x=>x.TemperaturaMinima) // sort by coldest
            .Take(toTake) // take 3 coldest 
            .ToList();
2021-11-25 14:27:06

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................