2013-08-22 4 views
0

Я просмотрел StackOverflow и пробовал вещи из нескольких сообщений, но я полностью застрял. В основном у меня есть запрос ниже (протестирован в LinqPad), который для значений «sum» дает мне одно и то же значение дважды. То, что я на самом деле хочу, - это объединение в одну и ту же таблицу, группу по дате и отображение суммы того, что по сути является одним и тем же столбцом (Value), из объединенной таблицы и исходной таблицы.Linq SQL присоединяется к одной таблице с группой и суммой

Я обнаружил, что вы не можете использовать псевдонимы (то есть в SQL FieldName как «NewFieldName») в LINQ, поэтому мне нужно подвести итоги 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

Редактировать

Я забыл, где предложение.

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 был другим, мне удалось получить ответ со своего поста. Вместо «group p new ...» мне пришлось сделать «group new {... anonymous type} by new ...» :-) – Dominik

+0

Да, извините, но я не используется в синтаксисе запроса .. . :-) –

Смежные вопросы