code_junkie

Another LINQ Pivot Problem - Convert SQL Script to LINQ

Nov 12th, 2011
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. ALTER PROCEDURE [dbo].[GetTimesheetForWeekById]
  2. @timesheetid int,
  3. @begindate VarChar(20),
  4. @enddate VarChar(20)
  5. AS
  6. BEGIN
  7.  
  8. SELECT T.TaskName,
  9. SUM(
  10. case DATEPART(weekday, TE.StartTime)
  11. WHEN 1 THEN DATEDIFF(minute, TE.StartTime, TE.EndTime) ELSE 0 END
  12. ) AS Sunday,
  13. SUM(
  14. case DATEPART(weekday, TE.StartTime)
  15. when 2 THEN DATEDIFF(minute, TE.StartTime, TE.EndTime) ELSE 0 END
  16. ) AS Monday,
  17. SUM(
  18. case DATEPART(weekday, TE.StartTime)
  19. when 3 THEN DATEDIFF(minute, TE.StartTime, TE.EndTime) ELSE 0 END
  20. ) AS Tuesday,
  21. SUM(
  22. case DATEPART(weekday, TE.StartTime)
  23. when 4 THEN DATEDIFF(minute, TE.StartTime, TE.EndTime) ELSE 0 END
  24. ) AS Wednesday,
  25. SUM(
  26. case DATEPART(weekday, TE.StartTime)
  27. when 5 THEN DATEDIFF(minute, TE.StartTime, TE.EndTime) ELSE 0 END
  28. ) AS Thursday,
  29. SUM(
  30. case DATEPART(weekday, TE.StartTime)
  31. when 6 THEN DATEDIFF(minute, TE.StartTime, TE.EndTime) ELSE 0 END
  32. ) AS Friday,
  33. SUM(
  34. case DATEPART(weekday, TE.StartTime)
  35. when 6 THEN DATEDIFF(minute, TE.StartTime, TE.EndTime) ELSE 0 END
  36. ) AS Saturday
  37.  
  38. FROM Tasks T
  39. INNER JOIN TimeEntries TE on T.TaskID = TE.TaskID
  40. WHERE TE.StartTime BETWEEN
  41. (CONVERT(datetime, @begindate, 103)) AND (CONVERT(datetime, @enddate, 103))
  42. AND TE.TimesheetID = @timesheetid
  43. GROUP BY T.TaskName
  44. END
  45.  
  46. int timesheetId = ...
  47. DateTime start = ..., end = ...
  48. var qry = from timeEntry in ctx.TimeEntries
  49. let date = timeEntry.StartTime.Date
  50. where timeEntry.TimesheetId == timesheetId
  51. && date >= start
  52. && date <= end
  53. group timeEntry by timeEntry.Task.TaskName into grp
  54. select new {
  55. TaskName = grp.Key,
  56. Monday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Monday).Count(),
  57. Tuesday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Tuesday).Count(),
  58. Wednesday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Wednesday).Count(),
  59. Thursday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Thursday).Count(),
  60. Friday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Friday).Count()
  61. };
  62.  
  63. var qry = from timeEntry in timeEntries
  64. let date = timeEntry.StartTime.Date
  65. where timeEntry.TimesheetId == timesheetId
  66. && date >= start
  67. && date <= end
  68. group timeEntry by timeEntry.Task.TaskName into grp
  69. select new
  70. {
  71. TaskName = grp.Key,
  72. Monday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Monday)
  73. .Sum(x=>x.EndTime.Subtract(x.StartTime).TotalMinutes),
  74. Tuesday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Tuesday)
  75. .Sum(x => x.EndTime.Subtract(x.StartTime).TotalMinutes),
  76. Wednesday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Wednesday)
  77. .Sum(x => x.EndTime.Subtract(x.StartTime).TotalMinutes),
  78. Thursday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Thursday)
  79. .Sum(x => x.EndTime.Subtract(x.StartTime).TotalMinutes),
  80. Friday = grp.Where(x => x.StartTime.DayOfWeek == DayOfWeek.Friday)
  81. .Sum(x => x.EndTime.Subtract(x.StartTime).TotalMinutes),
  82. };
Add Comment
Please, Sign In to add comment