首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

急求。Linq多表联合查询,Group By分组有关问题

2013-04-20 
急求。。Linq多表联合查询,Group By分组问题我使用的Wcf RIA Silverlight,有两个数据表,siteInfo表(siteID,

急求。。Linq多表联合查询,Group By分组问题
我使用的Wcf RIA Silverlight,有两个数据表,siteInfo表(siteID,经度lon,纬度lat,siteName)和shopInfo表(shopID,siteID,date,earning),两个表通过siteID关联,我想实现这样的查询,例如:
siteInfo表
siteID  lon      lat    siteName
1       112.00   32.10   长沙
2       112.10   33.20    武汉

shopInfo表
shopID   siteID   date        earning
1          1      2012/1/2    1000
2          1      2012/1/2    2000 
3          1      2012/1/3    1500
1          2      2012/1/2    1200
2          2      2012/1/2    2200 
3          2      2012/1/3    1300

想得到的结果:
siteID     lon      lat    siteName    date      earning 
  1       112.00   32.10    长沙         2012/1/2   3000
  1       112.00   32.10    长沙         2012/1/3   1500
  2       112.10   33.20    武汉         2012/1/2    3400
  2       112.10   33.20    武汉         2012/1/3    1300

我是这样做的,我首先DomainService.metadata.cs自定义一个集合类    

  //自定义集合类    
    public class site_shopInfo
    {
        [DataMember]
        [Key]
        public int siteID  { get; set; }
        [DataMember]
        public decimal Latitude { get; set; }
        [DataMember]
        public decimal Longitude { get; set; }
        [DataMember]
        public DateTime  date {get;set;}
        [DataMember]
        public int Totalearning {get;set;}
}

然后在DomainService.cs里面定义查询方法
     public IQueryable<site_shopInfo> Getsite_shopInfo()
        {
       var query =from a in this.ObjectContext.siteInfo 
       join b in this.ObjectContext.shopInfo on a.siteID equals b.siteID 


       group new {a,b} by new { a.Lon, a.Lat, a.siteID, b.date} into g 
       select new site_shopInfo{
         SiteID=g.Key.siteID,
         Longitude=g.Key.Lon, 
         Latitude=g.Key.Lat, 
         date=g.Key.date, 
         Totalearning=g.Sum(t => t.b.earning)};
return  query ;}
但是等到的结果是:
siteID     lon      lat    siteName    date      earning 
  1       112.00   32.10    长沙         2012/1/2   3000
  2       112.10   33.20    武汉         2012/1/2    3400

我调试了下,可以读出记录的条数,但是不能显示2012/1/3的数据,我觉得是自定义集合类site_shopInfo
的[key]的问题,请教一下,我怎么解决这个问题?
[解决办法]
奇怪啊,跟Key应该没关系
试试下面这个,即先按b分组,在跟ajoin

  public IQueryable<site_shopInfo> Getsite_shopInfo()
         {
        var query =from b in (from b in this.ObjectContext.shopInfo 
                   group b by new {b.siteID,b.date} into g
                   select{ SiteID=g.Key.siteID,
                           date=g.Key.date, 
                           Totalearning=g.Sum(t => t.earning)}
                   ) join a in this.ObjectContext.siteInfo 
                     on a.siteID equals b.siteID 
                    select new site_shopInfo{
          SiteID=a.siteID,
          Longitude=a.Lon, 
          Latitude=a.Lat, 
          date=b.date, 
          Totalearning=b.Totalearning};
 return  query ;}

热点排行