LINQ 组结果和来自另一个 table 的 select

LINQ Group results and select from another table

我有以下数据库结构:

table RoadSegment
    int SegmentID
    double StartKm
    double EndKm

table GeographicData
    double Km
    double latitude
    double longitude

table RoadFeature
    int FeatureID
    int SegmentID

而且我想要select一定公里范围内的所有道路特征的列表,但我也想要 获取 each 特征段中的所有地理坐标。无论如何我可以做 这仅需一次数据库访问(一条 LINQ 语句)?我试过以下方法:

from feat in RoadFeature
from geo in GeographicData
join seg in RoadSegment on feat.SegmentID equals seg.SegmentID

where geo.Km >= seg.StartKm && geo.Km <= seg.EndKm

group feat by feat.FeatureID into grp

select new {
    Feature = grp.Key,
    GeoData = grp.ToList()
}

但对于每个功能,我得到的只是一个具有相同 ID 的功能列表。我怎样才能继续得到, 对于每个要素,其线段上的坐标列表?也就是说,我想要以下内容 查询结果:

[
    {
        FeatureID: 1,
        GeoData: [
            [-11.786783, 22.4567864],
            [-11.654684, 22.6546548],
            [-11.646648, 22.7867544]
        ]
    },

    {
        FeatureID: 2,
        GeoData: [
            [-11.111265, 22.4118787],
            [-11.568746, 22.6546548],
            [-11.124687, 22.0121571]
        ]
    }
]

一些数据:

RoadSegment
    ID      StartKm     EndKm
    41      57.6        69.4
    42      69.4        80
    43      80          86.5
    44      86.5        92.2
    45      92.2        126
    46      126         132

RoadFeature
    FeatureID   SegmentID
    1           41
    2           42
    3           43
    4           44
    5           45
    6           46

GeographicData
    Km          latitude        longitude
    57.62       -19.959059      -44.339733          
    57.622      -19.959121      -44.339793          
    57.631      -19.959182      -44.339857          
    57.641      -19.959249      -44.339922          
    57.651      -19.959317      -44.339989          
    57.661      -19.959387      -44.340062          
    57.672      -19.959465      -44.340145          
    57.684      -19.959548      -44.340232          
    57.697      -19.959632      -44.340322          
    57.71       -19.959721      -44.340419          
    57.724      -19.959815      -44.340522          
    57.739      -19.959913      -44.34063           
    57.755      -19.960013      -44.340739          
    57.771      -19.960114      -44.340846          
    57.787      -19.960213      -44.34095    

(要点是,每个段有 1 个特征,但每个段有一大堆地理数据 公里。另外,我想要不依赖于独特性的解决方案 每个细分的特征,如果可能的话)

认为您只需要在分组中添加 geo

然后你可以select这些匿名类型的数据。

所以

from feat in RoadFeature
from geo in GeographicData
join seg in RoadSegment on feat.SegmentID equals seg.SegmentID

where geo.Km >= seg.StartKm && geo.Km <= seg.EndKm

group new {feat, geo} by feat.FeatureID into grp

select new {
    Feature = grp.Key,
    GeoData = grp.Select(x => x.geo).ToList()
}