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()
}
我有以下数据库结构:
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()
}