簡體   English   中英

使用Group by和Joins進行Linq查詢

[英]Linq query using Group by and Joins

我有兩個表:

旗幟

--------------------------------------------------------|
 BId   | Name | Link | Image | AltText| Target | BActive|
--------------------------------------------------------
 |1    | hello| http| a.jpg  |helloimg|        |    1   |
--------------------------------------------------------

追蹤

------------------------------------------------------
|TId   | BId| ICount| CCount| CreateDate             | 
------------------------------------------------------
|1     |  1 | 102   |  300  |  2015-11-17 00:00:000  |
|2     |  1 | 182   |  100  |  2015-11-14 00:00:000  |
|3     |  1 | 192   |  200  |  2015-11-12 00:00:000  |
------------------------------------------------------

我想找到2015年11月12日至2015年11月15日之間每個BId的ICount和CCound的總和。

這是我嘗試過的代碼:

from p in Bannertables
join q in BannerTrackings
on p.BannerId equals q.BannerId
group p by p.BannerId into myTab
select new { 
    BannerId = myTab.Key,
    ImpressionCount = myTab.Sum( x=> x.ImpressionCount),
    ClickCount = myTab.Sum(x => x.ClickCount)
};

如何根據指定的日期范圍對結果進行排序?

下面加入where ,以您的查詢:

var d1 = new DateTime(2015, 11, 12);
var d2 = new DateTime(2015, 11, 15);
var query=from p in Bannertables
          join q in BannerTrackings
          on p.BannerId equals q.BannerId
          where q.CreateDate>=d1 && q.CreateDate<=d2
          group q by p.BannerId into myTab
          select new { 
                       BannerId = myTab.Key,
                       ImpressionCount = myTab.Sum( x=> x.ImpressionCount),
                       ClickCount = myTab.Sum(x => x.ClickCount)
                      };

更新資料

如果您想訪問標語的屬性,請將其包含在組中,如下所示:

var d1 = new DateTime(2015, 11, 12);
var d2 = new DateTime(2015, 11, 15);
var query=from p in Bannertables
          join q in BannerTrackings
          on p.BannerId equals q.BannerId
          where q.CreateDate>=d1 && q.CreateDate<=d2
          group new{Banner=p,Tracking=q} by p.BannerId into myTab
          select new { 
                       BannerId = myTab.Key,
                       Bannername=myTab.Select(e=>e.Banner.Name).FirstOrDefault(),
                       ImpressionCount = myTab.Sum( x=> x.Tracking.ImpressionCount),
                       ClickCount = myTab.Sum(x => x.Tracking.ClickCount)
                      };

但是,如果您只想要橫幅名稱,則更好:

var d1 = new DateTime(2015, 11, 12);
var d2 = new DateTime(2015, 11, 15);
var query=from p in Bannertables
          join q in BannerTrackings
          on p.BannerId equals q.BannerId
          where q.CreateDate>=d1 && q.CreateDate<=d2
          group q by new {p.BannerId,p.Name} into myTab
          select new { 
                       BannerId = myTab.Key.BannerId,
                       BannerName=myTab.Key.Name,
                       ImpressionCount = myTab.Sum( x=> x.ImpressionCount),
                       ClickCount = myTab.Sum(x => x.ClickCount)
                      };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM