0

我查看了 StackOverflow 并尝试了一些帖子,但完全被卡住了。基本上我有下面的查询(在 LinqPad 中测试),对于“总和”值,它给了我两次相同的值。我真正想要的是连接到同一个表,按日期分组,并显示来自连接表和原始表的基本相同列(值)的总和。

我发现您不能在 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

任何想法都会被愉快地接受:-)

4

1 回答 1

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
)
于 2013-08-22T08:53:34.083 回答