我一直在做最後三天的一項任務。我嘗試將一個SQL查詢轉換爲基於「將列轉換爲行」的稱爲Pivot表的linq。將Sql數據透視表查詢轉換爲EF4中的linq
我的SQL查詢如下。
SELECT project_name
,SUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THRUSDAY
,FRIDAY
,SATURDAY
FROM
(
SELECT project_name
,personnel_name
,DATENAME(dw, report_date) AS day_name
,SUM(hours) AS HOURS
FROM [TimeSheet]
INNER JOIN [ProjectMaster]
ON [TimeSheet].[project_id] = [ProjectMaster].[project_id]
INNER JOIN [Personnel]
ON [TimeSheet].[personnel_id] = [Personnel].[personnel_id]
WHERE report_date BETWEEN getdate() - 7 AND getdate()
GROUP BY project_name, personnel_name, DATENAME(dw, report_date)
) sourceQuery PIVOT (SUM(hours)
FOR day_name IN
(SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THRUSDAY,FRIDAY,SATURDAY)) AS pvt
我確實到目前爲止,它轉換成LINQ低於!
var before = DateTime.Now.AddDays(-7);
DateTime firstSunday = new DateTime(1753, 1, 7);
var DayWiseTS = from TSList in objWPFEntities.Timesheets.Include("ProjectMaster").Include("Personnel")
where (TSList.report_date >= before && TSList.report_date <= System.DateTime.Now)
select new { TSList.ProjectMaster.project_name, TSList.Personnel.personnel_name, TSList.report_date, TSList.hours } into sourceQuery
group sourceQuery by new { sourceQuery.project_name, sourceQuery.personnel_name, sourceQuery.report_date, sourceQuery.hours } into pvt
select new
{
projectname = pvt.Key.project_name,
Sunday = (EntityFunctions.DiffDays(firstSunday, pvt.Key.report_date.Value) % 7 == 0 ? pvt.Sum(g => g.hours) : 0),
Monday = (EntityFunctions.DiffDays(firstSunday, pvt.Key.report_date.Value) % 7 == 1 ? pvt.Sum(g => g.hours) : 0),
Tuesday = (EntityFunctions.DiffDays(firstSunday, pvt.Key.report_date.Value) % 7 == 2 ? pvt.Sum(g => g.hours) : 0),
Wednesday = (EntityFunctions.DiffDays(firstSunday, pvt.Key.report_date.Value) % 7 == 3 ? pvt.Sum(g => g.hours) : 0),
Thrusday = (EntityFunctions.DiffDays(firstSunday, pvt.Key.report_date.Value) % 7 == 4 ? pvt.Sum(g => g.hours) : 0),
Friday = (EntityFunctions.DiffDays(firstSunday, pvt.Key.report_date.Value) % 7 == 5 ? pvt.Sum(g => g.hours) : 0),
Saturday = (EntityFunctions.DiffDays(firstSunday, pvt.Key.report_date.Value) % 7 == 6 ? pvt.Sum(g => g.hours) : 0)
};
我得到的結果在這兩個查詢,但在SQL中,我得到了完美的結果,因爲我需要的,但在LINQ,我還沒有得到所需的數據如SQL。
SQL結果::
LINQ的結果::
我想,在我的LINQ查詢,我沒有通過小時做組!
任何人都可以幫助我嗎?
我已經取得了98%,只是沒有得到結果,因爲我有顯示爲SQL,當你比較我在圖像中顯示的輸出時,你會知道只有在linq查詢中有一些問題。我需要解決!這就是爲什麼我需要專業人士幫助完成它,所以這是全新的事情!這個查詢已經完成了旋轉! – sikender