where s.rhTime > Starttime && s.rhTime <= Endtime
group s by s.CityName into g
select new { CityName = g.Key, totalP = g.Sum(p => p.prec) };
如上的一个查询得到按cityname分组的结果集,我想在结果集中还包括字段lon和lat(这两个字段在表rain_hour中,表示每个cityname的经纬度),那么select new里面该怎么写呢?我直接写lon=s.lon,lat=s.lat不行啊!!!
14 个解决方案
#1
var sta = from s in LocalEdM.rain_hour
where s.rhTime > Starttime && s.rhTime <= Endtime
group s by s.CityName into g
select new { CityName = g.Key, totalP = g.Sum(p => p.prec),lon=g.FirstOrDefault().lon,lat=g.FirstOrDefault().lat };
where s.rhTime > Starttime && s.rhTime <= Endtime
group s by s.CityName into g
select new { CityName = g.Key, totalP = g.Sum(p => p.prec),lon=g.FirstOrDefault().lon,lat=g.FirstOrDefault().lat };
#2
失败的数据库设计
字段lon和lat属于冗余的数据。
字段lon和lat属于冗余的数据。
#3
谢谢,方法可行,能解释一下么,为什么能用FirstOrDefault提取指定的字段?
#4
FirstOrDefault 表示取集合第一个或默认的元素 从字面上就可以的理解。
你group出来集合的每一个元素的lon和lat属性都是一样的,所以取哪一个都可以,
Tim哥给的解决方案就是取第一个。
实际上你把lon和lat放在关联表里存储就不会有这样的需求,所以我说这是失败的数据库设计。
你group出来集合的每一个元素的lon和lat属性都是一样的,所以取哪一个都可以,
Tim哥给的解决方案就是取第一个。
实际上你把lon和lat放在关联表里存储就不会有这样的需求,所以我说这是失败的数据库设计。
#5
不知道你能不能明白,你百度一下 "数据库范式" 看看会有助于你理解。
#6
哦,谢谢,请教一下,如果改为关联表该如何改?假设lon,lat的信息放在cityinf表中,那么是设定cityinf表的cityname为主键,然后rain_hour的cityname为外键来关联cityinf么?
#7
对,就是这个意思。
“rain_hour” 我想这个表应该是记录有关每个城市下雨时间的数据,
那么这张表中就不应该出现除 "cityInfo"表主键外的任何字段,
只需在某个字段上与 "cityInfo"表的主键存在外键关系即可。
“rain_hour” 我想这个表应该是记录有关每个城市下雨时间的数据,
那么这张表中就不应该出现除 "cityInfo"表主键外的任何字段,
只需在某个字段上与 "cityInfo"表的主键存在外键关系即可。
#8
嗯,我把表按上面说的改了,但是怎么把查询rain_hour分组后的集合关联回cityinfo表得到lon,lat呢,能给个示例么?
#9
给个伪代码:
select B.*,A.lon,A.lat from CityInfo as A
inner join
(select CityName,sum(prec) as total from rain_hour
where rhTime > Starttime && rhTime <= Endtime group by CityName) as B
on A.CityName=B.CityName
#10
sql查询语句我也会写,就是linq能达到这个效果的代码不会写,有linq的伪代码么?
#11
我看网上的例子,建立主外键后,A表/B表的名字就变成了实体中B表/A表的导航属性。可以通过导航属性访问另一个表,但是为什么我输入了A.B.???,引不出B的其他属性呢?
#12
你可以分成两次查询,比较笨的写法
var query1= from s in LocalEdM.rain_hour
where s.rhTime > Starttime && s.rhTime <= Endtime
group s by s.CityName into g
select new { CityName = g.Key, totalP = g.Sum(p => p.prec) };
var query2=from data in LocalEdM.CityInfo
join data1 in query1
on data.CityName=data1.CityName
select new {CityName=data1.CityName,totalP=data1.totalP,lon=data.lon,lat=data.lat}
#13
EF应该有这样的功能 可以一次查出来。
具体我没用过,也不清楚。
具体我没用过,也不清楚。
#14
谢谢两位的解答,收工结贴!!!
#1
var sta = from s in LocalEdM.rain_hour
where s.rhTime > Starttime && s.rhTime <= Endtime
group s by s.CityName into g
select new { CityName = g.Key, totalP = g.Sum(p => p.prec),lon=g.FirstOrDefault().lon,lat=g.FirstOrDefault().lat };
where s.rhTime > Starttime && s.rhTime <= Endtime
group s by s.CityName into g
select new { CityName = g.Key, totalP = g.Sum(p => p.prec),lon=g.FirstOrDefault().lon,lat=g.FirstOrDefault().lat };
#2
失败的数据库设计
字段lon和lat属于冗余的数据。
字段lon和lat属于冗余的数据。
#3
谢谢,方法可行,能解释一下么,为什么能用FirstOrDefault提取指定的字段?
#4
FirstOrDefault 表示取集合第一个或默认的元素 从字面上就可以的理解。
你group出来集合的每一个元素的lon和lat属性都是一样的,所以取哪一个都可以,
Tim哥给的解决方案就是取第一个。
实际上你把lon和lat放在关联表里存储就不会有这样的需求,所以我说这是失败的数据库设计。
你group出来集合的每一个元素的lon和lat属性都是一样的,所以取哪一个都可以,
Tim哥给的解决方案就是取第一个。
实际上你把lon和lat放在关联表里存储就不会有这样的需求,所以我说这是失败的数据库设计。
#5
不知道你能不能明白,你百度一下 "数据库范式" 看看会有助于你理解。
#6
哦,谢谢,请教一下,如果改为关联表该如何改?假设lon,lat的信息放在cityinf表中,那么是设定cityinf表的cityname为主键,然后rain_hour的cityname为外键来关联cityinf么?
#7
对,就是这个意思。
“rain_hour” 我想这个表应该是记录有关每个城市下雨时间的数据,
那么这张表中就不应该出现除 "cityInfo"表主键外的任何字段,
只需在某个字段上与 "cityInfo"表的主键存在外键关系即可。
“rain_hour” 我想这个表应该是记录有关每个城市下雨时间的数据,
那么这张表中就不应该出现除 "cityInfo"表主键外的任何字段,
只需在某个字段上与 "cityInfo"表的主键存在外键关系即可。
#8
嗯,我把表按上面说的改了,但是怎么把查询rain_hour分组后的集合关联回cityinfo表得到lon,lat呢,能给个示例么?
#9
给个伪代码:
select B.*,A.lon,A.lat from CityInfo as A
inner join
(select CityName,sum(prec) as total from rain_hour
where rhTime > Starttime && rhTime <= Endtime group by CityName) as B
on A.CityName=B.CityName
#10
sql查询语句我也会写,就是linq能达到这个效果的代码不会写,有linq的伪代码么?
#11
我看网上的例子,建立主外键后,A表/B表的名字就变成了实体中B表/A表的导航属性。可以通过导航属性访问另一个表,但是为什么我输入了A.B.???,引不出B的其他属性呢?
#12
你可以分成两次查询,比较笨的写法
var query1= from s in LocalEdM.rain_hour
where s.rhTime > Starttime && s.rhTime <= Endtime
group s by s.CityName into g
select new { CityName = g.Key, totalP = g.Sum(p => p.prec) };
var query2=from data in LocalEdM.CityInfo
join data1 in query1
on data.CityName=data1.CityName
select new {CityName=data1.CityName,totalP=data1.totalP,lon=data.lon,lat=data.lat}
#13
EF应该有这样的功能 可以一次查出来。
具体我没用过,也不清楚。
具体我没用过,也不清楚。
#14
谢谢两位的解答,收工结贴!!!