2014-04-07 51 views
0

我正在處理數年的大數據。如何將數據列表分組爲年,季,月,周,日?

的數據模型很簡單:

public class ValueData 
{ 
    public DateTime TimeRecorded {get; set;} 
    public double ValueRecorded {get; set;} 
} 

有ValueData列表後:多年的數據List<ValueData>,我需要組基於數據:年==>包含的4個賽季的數據:季節==>一個季節包含4個月==>一個月包含4周的數據==>一週包含基於一年的星期日曆數字的7天的數據。因爲我需要每年,每季,每月,每週和每天的數據總和

我該如何實現這種數據分類?我應該使用LinQ嗎?

+0

您可以使用LINQ,您可以使用不同的方法。但是,你卡在哪裏?這聽起來像一個需求規格說明。 –

+0

我們在談論多少條記錄? – Marcom

+0

@TimSchmelter im Stucking根據年份,季節,月份,周和日查找分組數據的方法。哪種是你可以想到的另一種方法? – olidev

回答

0

我想你正在尋找類似於conditional groups 但是2gbs的數據需要一段時間才能處理。 我想一次解析並保存結果是可以的,但如果你需要經常運行,你需要一個更合適的解決方案。

0

我相信你想沿着以下查詢的路線的東西:

var groups = data.GroupBy(v => new {Year = v.TimeRecorded.Year, 
            Season = SeasonFromMonth(v.TimeRecorded.Month), 
            Month = v.TimeRecorded.Month, 
            Week = System.Globalization.CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(v.TimeRecorded, System.Globalization.CalendarWeekRule.FirstDay, System.DayOfWeek.Monday), 
            Day = v.TimeRecorded.Day}); 

與接受整月,並返回指示賽季的一些值(可能是一個枚舉)一個輔助函數SeasonFromMonth

然後,您可以選擇相關的亞組之類的查詢:

var fallValues = groups.Where(g => g.Key.Season == Seasons.Fall); 
var decemberValues = groups.Where(g => g.Key.Month == 12); 
var firstOfMonth = groups.Where(g => g.Key.Day == 1); 

等,或通過添加SelectMany條款(雖然SelectMany會扔掉鑰匙信息)拼合組到一個列表:

groups.Where(g => g.Key.Season == Seasons.Fall).SelectMany(g => g); 
groups.Where(g => g.Key.Month == 12).SelectMany(g => g); 
groups.Where(g => g.Key.Day == 1).SelectMany(g => g); 
相關問題