2012-07-31 27 views
2

我想創建一個友好的報告總結一些學生的報名時間。我最初開始使用循環校園名稱,然後是時間,然後是日子和hibut,這是非常低效和緩慢的。我決定採取另一種方法,並在一次選擇中選擇我需要的所有數據,並使用c#進行組織。在C#中總結數據的最有效方法

Raw Data View

我的問題是我不知道是否投入數組或列表,或字典或數據表這個總結的招生和組織它,如下所示(樣機,不計算)。任何指導將不勝感激。

Friendly View

+0

您可以從該圖表中將數據拉入工作內存中嗎? – James 2012-07-31 20:35:52

+2

現在的數據在哪裏?如果它在數據庫中,請寫入總和查詢 – 2012-07-31 20:35:58

+0

製作一個對象來表示您拉入的數據,然後製作一個對象列表。循環訪問列表並添加所有東西 – CSharpDev 2012-07-31 20:36:21

回答

1

好吧,如果你只需要顯示用戶的一些數據(而不是編輯它),你可能想創建一個報告。

否則,如果您只需要總和,您可以獲得IEnumerable中的所有數據並致電.Sum()。正如colinsmith指出的那樣,您可以並行使用Linq。

但有一點是確定的,雖然...如果你有很多數據,你不想做很多的查詢。您可以在SQL中使用sum查詢(如果數據存儲在數據庫中),或者從您獲取的集合中獲得總和。

您不想在循環中獲取數據。處理內存中的數據比查詢多次數據庫然後處理它快得多。

+0

這是大量的數據,並花了大約15分鐘使用循環。它的工作,但表現令人無法接受。不知道如何組織它使用SQL來格式化,以便快速導入,如果這將更有效。 – Geekender 2012-07-31 20:51:02

+0

你能告訴我們你用來查詢你的數據的代碼嗎(花了15分鐘)?有些人一定可以幫助你從那裏弄清楚事情。 – Pacane 2012-07-31 20:52:11

0

通常我會建議你在數據庫中這樣做,即選擇使用組等,我有點麻煩搞清楚你的​​第一張照片與第二張關於日期的關係,所以我可以沒有提供一個例子。當然,你也可以在C#中使用LINQ來實現對象,但是我會先在數據庫中嘗試並解決它,這樣你的性能和帶寬就會更好。

0

我不太清楚你到底在幹什麼。但是從我的理解,我建議你創建一個類來表示您的註冊

public class Enrollment 
{ 
    public string CampusName { set;get;} 
    public DateTime DateEnrolled { set;get;} 
} 

,並從數據庫中的所有招生信息這一類的集合

List<Enrollment> enrollments=db.GetEnrollments(); 

現在你可以這樣做這一系列的許多操作以獲得您想要的數據

例如:如果你想獲得的所有註冊碰巧在星期五

var fridaysEnrollMent = enrollments. 
      Where(x => x.DateEnrolled.DayOfWeek == DayOfWeek.Friday).ToList(); 

如果你想擴招的計數AA校園發生

var fridayCount = fridaysEnrollMent .Where(d => d.CampusName == "AA").Count(); 
0

select campusname, ssrmeet_begin_time, count(ssrmeet_monday), count(ssrmeet_tue_day) .. 
from the_table 
group by campusname, ssrmeet_begin_time 
order by campusname, ssrmeet_begin_time 
/

應接近你想要什麼。計數只計數值,而不是NULL。它比第一次將所有數據讀取到客戶端還要快上千倍。讓數據庫爲你做分析,它已經有了所有的數據。

順便說一句:而不是那些圖片,給一些ddl和插入語句與數據工作是聰明的。這將邀請更多人幫助回答這個問題。

相關問題