Your LINQ query is not structured the same way the T-SQL query is. Specifically, you are only including s
in the grouping. In fact, s
is named in a misleading way. It should be s2
. Include both:
from s1 in gzClasses.e_userLongSessions
join s2 in gzClasses.e_userLongSessions
on new {w = s1.workerId, n = s1.sessionNum}
equals new {w = s2.workerId, n = s2.sessionNum - 1}
into joined
from s2Null in joined.DefaultIfEmpty()
group new {s1, s2Null} by s1.workerId into g
orderby g.Key // workerId
select g.Average(e => (e.s2Null.startTime - e.s1.endTime).TotalSeconds);
Now, you have data from both tables available in the aggregate. I don't think both of your queries are taking into account that s2.startTime
can be null. But that is a bug that is not the point of the question.