Připojte se k návratu více sloupců a pomocí group by Entity Framework

0

Otázka

Snažím se postavit této Entity Framework dotaz vrátit čtyři sloupce:

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

Ale nechci Cidade sloupci opakovat. Tak nevím, jak použít Skupiny jen v Cidade sloupce a vrátit všechny tyto čtyři sloupce.

Mohl byste mi pomoci?

`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

Nejlepší odpověď

0

Ahoj :) doufám, že jsem pochopila váš požadavek správně - chcete najít 3 nejchladnějších měst v DB, ne? Tady je můj názor. V podstatě jsem jen změnil připojit se ke skupině připojit, takže tam je jeden záznam pro každé město místo duplicitní položky. Také jsem se přestěhovala třídění až do konce.

    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

V jiných jazycích

Tato stránka je v jiných jazycích

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