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

如何使用LINQ将数组存入List<>?需聚合重复记录的坐标数组

解决LINQ查询中重复记录坐标整合为数组的问题

看起来你需要把相同idPoiType和sector的重复POI记录的坐标合并成数组,对吧?这可以通过LINQ的GroupBy方法结合投影轻松实现,我给你详细拆解方案:

1. 定义分组后的模型(可选但推荐)

原AppPoisModel是为单条坐标设计的,要存储数组的话,建议创建一个专门的分组模型,这样代码结构更清晰易维护:

public class GroupedAppPoisModel
{
    public int idPoiType { get; set; }
    public string sector { get; set; }
    // 用值元组存储坐标对,也可以自定义Coordinate类
    public (double Latitude, double Longitude)[] Coordinates { get; set; }
}

2. 修改LINQ查询实现分组与坐标整合

通过GroupBy按id和sector分组(这两个字段是判定“重复记录”的核心依据,如果你的重复定义不同,可以调整分组键),然后将每组内的坐标收集为数组:

var result = db.coord
    // 按id和sector分组,确保同类型同区域的记录被归为一组
    .GroupBy(c => new { c.id, c.sector })
    // 投影到分组模型中,整合每组的坐标
    .Select(group => new GroupedAppPoisModel
    {
        idPoiType = group.Key.id,
        sector = group.Key.sector,
        // 把每组的坐标转换为值元组数组,同时处理null值为0
        Coordinates = group.Select(item => 
            (Latitude: item.latitude ?? 0, Longitude: item.longitude ?? 0))
                           .ToArray()
    })
    .ToList();

额外说明

  • 如果你的“重复记录”仅以idPoiType为判定标准,只需要把GroupBy的键改成c => c.id即可;
  • 若不想创建新模型,也可以用匿名类型直接存储,但自定义模型会让后续代码更易读;
  • 要是需要更复杂的坐标结构,可以替换值元组为自定义的Coordinate类,比如:
public class Coordinate
{
    public double Lat { get; set; }
    public double Lng { get; set; }
}

然后把Select中的投影改成new Coordinate { Lat = item.latitude ?? 0, Lng = item.longitude ?? 0 }。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:25:42