2008-12-05 178 views
1

我的問題是我想要一個填充了任務花費時間的網格。它需要有一週的最高天數(最好是固定的 - 即Sun,Mon ... Sat)和任務名稱。該網格的內容將在該任務中有當天花費的個人時間。時間表:使用SQL,LINQ或類檢索數據?

要實現這一目標,最佳方法是什麼?選項一將嘗試將它全部放入數據庫中的SQL語句中。選項二是一組LINQ查詢,它們從任務和時間條目中提取原始數據並正確構建它。選項三是使用LINQ並將結果拉入類(或集合),然後綁定到控件(可能是gridview)。

你會如何做到這一點?

回答

3

我會對它不瞭解你的結構做一個粗略的攻擊,但是猜測你有一個任務表和一個任務時間表,用於存儲每個任務的實際時間和日期。這不是測試,但:

select t.taskname,sum(case when datepart(d,tt.taskdate)= 1,tt.taskhours)else 0 end)as Sunday, sum(case when datepart(d ,tt.taskdate)= 2,t.taskhours)else 0 end)as Monday from tasktable t join tasktime tt on t.taskid = tt.taskid where tt.taskdate> = @begindate and tt.taskdate < = @ enddate

Where子句很重要,因爲您可能只想在網格上顯示一週的時間(通常是當前周)。這也假設您已將您的工作時間的日期正確存儲爲日期時間數據類型。 (如果你現在還沒有解決這個問題 - 稍後你會感謝我。)變量將以某種方式從用戶界面提交。我個人會這樣做的存儲過程。我離開星期二到星期六讓你去做。

+0

這絕對是吠叫正確的樹。今天我會對此有所認識,並看看我是如何去的。 Upvote不管,謝謝。 – 2008-12-06 00:53:48

+0

這不是我正在追逐的東西,但結構對我來說是一個很好的指導。案件陳述主要是我正在尋找的,一旦我弄清楚如何正確彙總結果,我想我已經破解了它。感謝您的指導! – 2008-12-06 10:01:13

1

您似乎暗示數據當前駐留在數據庫中。最佳解決方案取決於數據的內部處理量和項目現有的基礎設施。

我要麼用大SQL查詢來一起把所有的數據並綁定ResultSet directy到網格(幾乎沒有任何處理或基礎設施),或使用LINQ來填充一種TimeSheetModel類,使用現有的基礎設施和使進一步處理。

+0

我喜歡在數據庫中保持儘可能多的數據處理的想法。但是我正在爲查詢的結構而努力。那裏有數據庫管理員? – 2008-12-05 10:09:24

1

您可以使用LinqToSql將行提取到內存中,然後LinqToObjects將這些行聚合到您的表格格式中(這是一種旋轉聚合)。

這篇文章顯示了linq數據透視查詢。在你的情況下,它會工作得很好,因爲你知道你想在設計時產生的列。 SQL command to LINQ (pivoting)

我推薦使用0個匿名類。應該有(至少)一個表示數據庫中的一行的類,以及表示網格中一行的值的類。


因爲我可以說我想在這裏的任何東西,我想評論一下HLGEM的SUM(CASE)技術。我之前在報告中使用過這種方法,我只用SQL編寫。它工作得很好......如果你想用SQL編寫。