的trendData是使用當前UTC日期爲結束日期和當前UTC日期的開始日期事件日誌時列表-13(數據庫保存日期,UTC)拆分過去兩週的數據爲當前和前一週
DateTime dUtcEnd = DateTime.UtcNow.Date;
DateTime dUtcStart = dUtcEnd.AddDays(-13);
var trendData = (from e in db.EventLogs
where e.EventDateTime >= dUtcStart && e.EventDateTime <= dUtcEnd
&& e.EventType == 'some event'
select e).ToList();
有沒有辦法在一週增量Take
和Skip
以填充數組值當前和前幾個星期?
沿着這些線?不知怎的,我想象Take
和Skip
需要它的基礎上EventDateTime,以便確定了被認爲是當前和前幾個星期。
var currentTrend = trendData.Take(7).Reverse();
var previousTrend = trendData.Skip(7).Take(7).Reverse();
爲了給一些進一步的情況下到什麼是試圖完成,下面是Highcharts陣列將如何填充的想法。
返回的結果將包含3個陣列。
WeeklyTrend results = new WeeklyTrend();
results.Categories = new string[7];
results.ThisWeek = new int[7];
results.LastWeek = new int[7];
填入Today類型的類別,每次當前星期減少一天。
int dayCounter = 6;
for (int i = 0; i < 7; i++)
{
results.Categories[i] = dUtcEnd.AddDays(-dayCounter).ToShortDateString();
dayCounter--;
}
查看Categories數組以查找EventDateTime與數組中的日期相匹配的數組值。
foreach (var cTrend in currentTrend)
{
var dayOfWeek = Array.FindIndex(results.Categories, c => c.Contains(cTrend.EventDateTime.ToShortDateString()));
results.ThisWeek[dayOfWeek]++;
}
看類別陣列,以尋找到EventDateTime與添加到當前周比賽日數組中的日期相匹配的數組值..
foreach (var pTrend in previousTrend)
{
var dayOfWeek = Array.FindIndex(results.Categories, c => c.Contains(pTrend.EventDateTime.AddDays(6).ToShortDateString()));
results.LastWeek[dayOfWeek]++;
}
的最終目標是填充一張Highcharts趨勢圖表,顯示本週與前一週相比的數據。
謝謝你。有一點需要注意的是,LINQ不喜歡'CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(p.EventDateTime,CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Sunday)',所以最初的查詢獲取數據需要首先在內存中。像這樣'var first = db.EventLogs.Where(x => x.EventDateTime> = dUtcStart && x.EventDateTime <= dUtcEnd && x.EventType ==「some event」)。ToList();'。從帖子http://stackoverflow.com/a/11261467/1040188找到答案 – iamchrisfryer