加入返回多列和使用集团的实体的框架

0

的问题

我在试图建立这个实体框架,查询返回这四列:

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

但我不想Cidade列重复。 所以我不知道如何使用集团只是在Cidade列和返回的所有这四列。

你能帮帮我吗?

`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

最好的答案

0

嗨:)我希望我理解您的要求正确-你想要找到3个寒冷的城市,你有数据库,对吗? 这里是我的采取。 我基本上只是改变了参加组参加,所以有一个条目的每个城市而不是重复的项目。 此外,我移动的排序结束。

    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

其他语言

此页面有其他语言版本

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