2013-08-22 62 views
0

Linq SQL加入我已经通过StackOverflow看过,并尝试从几个职位的东西,但我完全卡住。基本上我有下面的查询(LinqPad测试),对于“总和”值给我两次相同的值。我真正想要的是对同一个表的连接,按日期分组,并显示来自连接表和原始表的基本相同列(值)的总和。Linq SQL加入与组和总计

我发现你不能在LINQ中使用别名(即在SQL FieldName中作为'NewFieldName'),所以不知何故我需要总结t.Value和p.Value,并在SiteID和EntryDate旁边显示它们在我的结果。

(from p in DailyStatistics 
join t in DailyStatistics on new { p.EntryDate, p.SiteID} equals new { t.EntryDate, t.SiteID} 
where t.Metric == "MyVisitors" 
&& p.Metric == "MyVisits" 
&& p.EntryDate >= DateTime.Parse("2013-08-15") 
&& p.EntryDate <= DateTime.Parse("2013-08-21") 
group p by new { t.SiteID, p.EntryDate } into s 
orderby s.Key.EntryDate 
select new {s.Key.SiteID, s.Key.EntryDate, SumVisits = s.Sum(t => t.Value), SumVisitors = s.Sum(x => x.Value) }) 

这其中尤其是我试过了,但不能完全使其适合我的需求: SQL multiple joins and sums on same table

任何想法将欣然接受:-)

+0

'任何想法都会被高兴地接受,即使是一个坏主意?我希望你的“接受”意味着“被采纳”:)) –

+0

你正在通过相同的字段加入同一个表? –

+0

@KingKing肯定,我会接受他们,尝试它,失败,然后再试一次:-)似乎是我的工作日在这一刻:-) – Dominik

回答

2

编辑

我忘了where子句。

DailyStatistics 
.Join 
(
    DailyStatistics, 
    x=>new{x.EntryDate, x.SiteID}, 
    x=>new{x.EntryDate, x.SiteID}, 
    (o,i)=>new 
    { 
     VisitorEntry=i.Metric, 
     VisitEntry=o.Metric, 
     VisitorDate = i.EntryDate , 
     VisitDate = o.EntryDate , 
     i.SiteID, 
     VisitorValue = i.Value, 
     VisitValue = o.Value 
    } 
) 
.GroupBy 
(
    x=> 
    new 
    { 
     x.SiteID, 
     x.VisitDate 
    } 
) 
.Where 
(
    x=> 
    x.VisitorEntry == "MyVisitors" && 
    x.VisitEntry== "MyVisits" && 
    x.VisitDate >= DateTime.Parse("2013-08-15") && 
    x.VisitDate <= DateTime.Parse("2013-08-21") 
) 
.Select 
(
    x=> 
    new 
    { 
     x.Key.SiteID, 
     x.Key.VisitDate, 
     SumVisits = s.Sum(t => t.VisitValue), 
     SumVisitors = s.Sum(x => x.VisitorValue) 
    } 
) 
.OrderBy 
(
    x=>x.VisitDate 
) 
+0

谢谢,虽然我的Linq格式不同,我设法从你的帖子得到答案。而不是“由新的组p”...我不得不做“由新...组新”... ... :-) – Dominik

+0

是的,抱歉,但我没有用在查询语法.. :-) –