我有以下数据库结构:
table RoadSegment
int SegmentID
double StartKm
double EndKm
table GeographicData
double Km
double latitude
double longitude
table RoadFeature
int FeatureID
int SegmentID
我想选择一公里范围内所有道路要素的清单,但我也想 获取每个要素的细分中的所有地理坐标。无论如何我能做到 这只是一次数据库之旅(单个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个特征,但每个区域有多个地理数据 公里。此外,我想要的解决方案不依赖于它的独特性 每段的特征,如果可能的话)
答案 0 :(得分:0)
认为您只需要在分组中添加geo
。
然后您可以在匿名类型中选择这些数据。
所以
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()
}