You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework多表连接后如何按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")
                        // 按城市+州分组,同一城市归属唯一州,不会出现分组冲突
                        group new { d.TemperaturaMinima, d.TemperaturaMaxima } by new { a.Nome, b.Uf } into g
                        select new
                        {
                            Cidade = g.Key.Nome,
                            Estado = g.Key.Uf,
                            // 取该城市查询周期内的最低温,可根据业务调整聚合规则
                            TemperaturaMinima = g.Min(x => x.TemperaturaMinima),
                            // 取该城市查询周期内的最高温,可根据业务调整聚合规则
                            TemperaturaMaxima = g.Max(x => x.TemperaturaMaxima)
                        })
                        // 分组后排序取前3个最冷城市
                        .OrderBy(x => x.TemperaturaMinima)
                        .Take(3)
                        .ToList();

注意事项

  • 如果你的业务需求是取该城市在查询周期内任意一天的气温记录,而非周期内的温度极值,可以将select部分替换为以下写法,取分组内第一条符合排序要求的记录即可:
select new
{
    Cidade = g.Key.Nome,
    Estado = g.Key.Uf,
    TemperaturaMinima = g.OrderBy(x => x.TemperaturaMinima).First().TemperaturaMinima,
    TemperaturaMaxima = g.OrderBy(x => x.TemperaturaMinima).First().TemperaturaMaxima
}
  • 原代码中的排序逻辑放在分组前,分组后排序规则会失效,因此调整到分组之后执行,保证最终返回结果符合你预期的按最低温升序取前3的需求。

内容的提问来源于stack exchange,提问作者Gustavo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:06:04