2014-03-30 31 views
0

我需要幫助應用日曆年中的設置。我的用戶根據日曆中的季節將數字目標輸入到數據庫中。想一想,蘋果酒在秋季(9月至11月)的銷售量會更高,而在今年的其餘時間(12月至8月)會更少。然而,蘋果汁全年銷售均勻。使用LINQ將多個日期轉換爲範圍

爲了簡化我的用戶的數據輸入,他們輸入一個目標銷售編號以及編號爲開始爲每個產品的月份。

例如,在數據庫中的數據會看起來像這樣(有兩個目標對任何產品一個最大):

Apple Cider - September - 5,000 gallons 
Apple Cider - December - 1,000 gallons 
Apple Juice - September - 3,000 gallons 

我也有我們在數據庫表中的財政日曆,所以我知道每個會計年度,月份,本月的週數等與任何一天相關聯。

我需要將這些數據應用於報表,但我需要的數據是每年的每個月,而不僅僅是用戶輸入的數據。

我在使用LINQ加入我的會計日曆創建爆炸查看數據時遇到問題?我如何從一年中的所有月份列表開始,針對每種產品,將目標放入日曆中,然後填寫空白。例如,對於蘋果醋使用上述

January 
February 
March 
April 
May 
June 
July 
August 
September - 5,000 gallonws 
October 
November 
December - 1,000 gallons 


Apple Cider - September - 5,000 gallons 
Apple Cider - October - 5,000 gallons 
Apple Cider - November - 5,000 gallons 
Apple Cider - December - 1,000 gallons 
Apple Cider - January - 1,000 gallons 
Apple Cider - February- 1,000 gallons 
Apple Cider - March - 1,000 gallons 
Apple Cider - April- 1,000 gallons 
Apple Cider - May - 1,000 gallons 
Apple Cider - June - 1,000 gallons 
Apple Cider - July - 1,000 gallons 
Apple Cider - August - 1,000 gallons 

Apple Juice - September - 3,000 gallons 
Apple Juice - October - 3,000 gallons 
Apple Juice - November - 3,000 gallons 
Apple Juice - December - 3,000 gallons 
Apple Juice - January - 3,000 gallons 
Apple Juice - February - 3,000 gallons 
Apple Juice - March - 3,000 gallons 
Apple Juice - April - 3,000 gallons 
Apple Juice - May - 3,000 gallons 
Apple Juice - June - 3,000 gallons 
Apple Juice - July - 3,000 gallons 
Apple Juice - August - 3,000 gallons 
+0

謝謝您修改我的問題托馬斯。它應該讓別人更容易閱讀我的文章。 –

回答

0

的例子,我不知道有多少幫助,LINQ將是這種情況。

你可以用一個for循環相對簡單地實現所需的轉型:(。在東西可以在一個循環範圍通常可以代替完成的情況下)

' Sample data using anonymous types 
Dim entries() = 
    {New With {.Name = "Apple Cider", .Year = 2012, .Month = 9, .Quantity = 5000}, 
    New With {.Name = "Apple Cider", .Year = 2012, .Month = 12, .Quantity = 1000}, 
    New With {.Name = "Apple Juice", .Year = 2013, .Month = 9, .Quantity = 3000}} 
' Dictionary keyed by date 
Dim dict = entries.ToDictionary(_ 
    Function(entry) New DateTime(entry.Year, entry.Month, 1)) 
' Current is first entry 
Dim currentEntry = entries(0) 
Dim epoch = New DateTime(currentEntry.Year, currentEntry.Month, 1) 
' Iterate over 24 months 
For i = 0 To 23    
    Dim currentMonth = epoch.AddMonths(i) 
    ' Update current based on current month 
    If dict.ContainsKey(currentMonth) Then 
     currentEntry = dict(currentMonth) 
    End If 
    ' Write data 
    Console.WriteLine("{0} - {1} - {2} gallons", 
         currentEntry.Name, 
         MonthName(currentMonth.Month), 
         currentEntry.Quantity) 
Next 
0

要使用LINQ爲此使用Range()

下面是使用Enumerable.Range和@ PhillipTrelford的示例數據爲例:

Sub Main 
    Dim entries() = {New With {.Name = "Apple Cider", .Year = 2012, .Month = 9, .Quantity = 5000}, _ 
        New With {.Name = "Apple Cider", .Year = 2012, .Month = 12, .Quantity = 1000}, _ 
        New With {.Name = "Apple Juice", .Year = 2013, .Month = 9, .Quantity = 3000}} 

    Dim dict = entries.ToDictionary(Function(entry) New DateTime(entry.Year, entry.Month, 1)) 

    Dim startDate as DateTime = New DateTime(2012,9,1) 

    Dim curDefault = New With {.Name = "", .Quantity = 0} 
    Dim result = Enumerable.Range(0, 24).Select(Function(x) 
    Dim thisdate = startDate.AddMonths(x) 
    If dict.ContainsKey(thisdate) Then 
     curDefault.Name = dict(thisdate).Name 
     curDefault.Quantity = dict(thisdate).Quantity 
    End If 
    Return String.Format("{0} - {1} - {2} gallons",curDefault.Name,thisdate.ToString("MMMM"),curDefault.Quantity) 

    End Function) 

    result.Dump 
End Sub 

此代碼運行得很好,給EXPE (請參閱linqpad.com)

Apple Cider - September - 5000 gallons 
Apple Cider - October - 5000 gallons 
Apple Cider - November - 5000 gallons 
Apple Cider - December - 1000 gallons 
Apple Cider - January - 1000 gallons 
Apple Cider - February - 1000 gallons 
Apple Cider - March - 1000 gallons 
Apple Cider - April - 1000 gallons 
Apple Cider - May - 1000 gallons 
Apple Cider - June - 1000 gallons 
Apple Cider - July - 1000 gallons 
Apple Cider - August - 1000 gallons 
Apple Juice - September - 3000 gallons 
Apple Juice - October - 3000 gallons 
Apple Juice - November - 3000 gallons 
Apple Juice - December - 3000 gallons 
Apple Juice - January - 3000 gallons 
Apple Juice - February - 3000 gallons 
Apple Juice - March - 3000 gallons 
Apple Juice - April - 3000 gallons 
Apple Juice - May - 3000 gallons 
Apple Juice - June - 3000 gallons 
Apple Juice - July - 3000 gallons 
Apple Juice - August - 3000 gallons 
+0

謝謝你的迴應Hogan。你的代碼片段確實給我輸出,我正在尋找,但在你的迴應和菲利普的我注意到,你添加了一個年份屬性,我目前沒有的條目。不過,我認爲今年的重要性從一個日曆年到另一個日曆年。 (如果你正在+1,從12月到12月代表1代表1不會工作)。在製作詞典時,我可以使用當前年份而不是entry.year。而不是2012年的開始日期,我也可以使用當年。正確? –

+0

@GlenCiborowski - 當然,只要確保代碼的其餘部分不期待某一年。 – Hogan

相關問題