2014-01-24 93 views
0

Iv'e製作了一個列表方法,可以在我的MVC/ASP.NET應用程序中獲取已銷售產品的總量。我需要在List Method中添加一個DateTime參數,告訴它只能獲得前一天銷售的產品。創建一個時間跨度爲24/7的日期時間(每天重複)

此列表的目的是客戶可以看到他前一天賣出的東西以及所售產品的數量。這只是一些銷售統計。

我不確定如何創建從中獲取項目的方法的時間跨度。我正在考慮使用datetime作爲List Method的參數,然後聲明時間範圍。我不知道如何接近,雖然這個..

這是我的IList的方法:

public IList<BestsellersReportLine> DailyBestSellersReport(int billingCountryId = 0, 
      int recordsToReturn = 5, int orderBy = 1, int groupBy = 1, bool showHidden = false) 
     { 


       var query1 = from opv in _opvRepository.Table 
         join o in _orderRepository.Table on opv.OrderId equals o.Id 
         join pv in _productVariantRepository.Table on opv.ProductVariantId equals pv.Id 
         join p in _productRepository.Table on pv.ProductId equals p.Id 
         select opv; 


       var query2 = groupBy == 1 ? 
        //group by product variants 
         from opv in query1 
         group opv by opv.ProductVariantId into g 
         select new 
         { 
          EntityId = g.Key, 
          TotalAmount = g.Sum(x => x.PriceExclTax), 
          TotalQuantity = g.Sum(x => x.Quantity), 
         } 
         : 
        //group by products 
         from opv in query1 
         group opv by opv.ProductVariant.ProductId into g 
         select new 
         { 
          EntityId = g.Key, 
          TotalAmount = g.Sum(x => x.PriceExclTax), 
          TotalQuantity = g.Sum(x => x.Quantity), 
         } 
         ; 

       switch (orderBy) 
       { 
        case 1: 
         { 
          query2 = query2.OrderByDescending(x => x.TotalQuantity); 
         } 
         break; 
        case 2: 
         { 
          query2 = query2.OrderByDescending(x => x.TotalAmount); 
         } 
         break; 
        default: 
         throw new ArgumentException("Wrong orderBy parameter", "orderBy"); 
       } 

       if (recordsToReturn != 0 && recordsToReturn != int.MaxValue) 
        query2 = query2.Take(recordsToReturn); 

       var result = query2.ToList().Select(x => 
       { 
        var reportLine = new BestsellersReportLine() 
        { 
         EntityId = x.EntityId, 
         TotalAmount = x.TotalAmount, 
         TotalQuantity = x.TotalQuantity 
        }; 
        return reportLine; 
       }).ToList(); 

       return result; 

     } 

香港專業教育學院創建這些變量的工作,如果這是正確的說不上來?:

 DateTime CurrentDay = DateTime.Now; 
     DateTime PreviousDay = DateTime.Now.AddDays(-1); 

     DateTime TimeFrame = DateTime.Parse("00:00:00 AM"); 

阿尼的想法?

謝謝!

//克里斯

+0

你想在哪裏使用TimeSpan? –

+0

Hejsan!我希望該方法能夠在「時間範圍內」獲取項目。這將是在後臺運行的計劃任務,需要在每天結束時執行。因此,如果此方法在當天執行(2014-01-24上午00:00之後),則會在昨天(2014-01-24)的00:00至00:00之間獲得所有產品。然後每天重複這個過程。希望這使得sence – koffe14

+0

好吧,您可以使用DateTime.Now並使用DateTime.Now調用中的年,月和日創建一個新的DateTime,以便在00:00 am之前獲取DateTime。然後使用DateTime.AddDays(-1)獲得第二次約會,並利用這些日子與之比較。或者,使用這種技術創建TimeSpan。如果這是你要求的,我可以嘗試制定一個答案。 –

回答

1
var yesterday = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0)); 
var earliest = new DateTime(yesterday.Year, yesterday.Month, yesterday.Day, 0, 0, 0); 
var latest = earliest.Add(new TimeSpan(1, 0, 0, 0, -1)); 

使用;

where earliest <= dateToTest && latest >= dateToTest 
+0

這真是太棒了,謝謝!這個數字在「昨天」和「最近=最早」的「()」中表示的究竟是什麼。我懷疑「1」是白天,但有4位數字。你沒有使用特定的時間? – koffe14

+0

Timespan(天,小時,分鐘,秒,[毫秒]),所以計算'latest'的最後一個用法增加1天,但減去1毫秒,這會給你當天的最後一毫秒 – Moho

+0

我看到謝謝。並且「<= dateToTest && latest> = dateToTest」代表「<=今天&&最近> =昨天」?我今天使用了DateTime.Now,昨天使用了DateTime.Now.AddDays(-1)。我不應該設置日期,因爲這個過程是每天重複的,而不是某個特定的日子。 – koffe14

1

可以使用,

var range = new 
     { 
      Start = DateTime.Today.AddDays(-1), 
      End = DateTime.Today.AddSeconds(-1) 
     }; 

,並使用它像,

(DateOfSale>=range.Start && DateOfSale<=range.End) 
+0

這可能適用於我。我有來自數據庫的StarTime和EndTime變量,但我不知道用什麼來替換「DateOfSale」。我可以用DateTime.now.addDays(-1)替換DateOfSale,因爲我不想測試昨天的日期嗎?謝謝! – koffe14

+0

@KristofferAndersson「DateOfSale」是包含要測試的日期的列名稱(或屬性名稱)。 –

+0

好吧,我可以設置開始爲DateOfSale作爲它的AddDays(-1)代表昨天? – koffe14

1

答案很簡單,你可以在12.00計算日期,然後繼續操作,

DateTime Today12AMDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0); 
    DateTime PreviousDay12AMDate = Today12AMDate.AddDays(-1); 

您的病情會看起來li ke,

where dateFromDatabase <= Today12AMDate && dateFromDatabase >= PreviousDay12AMDate 
相關問題