2013-02-17 81 views
0

我想運行並打印一個查詢,顯示每天每小時的訂單數量(24)。查詢以獲取每小時期間的所有操作

應該看起來像:
小時-1:00,的數訂單-5-
小時-2:00,的數訂單-45
小時-3:00,數訂單-25的
小時-4:00,數訂單-3
小時-5:00,訂單-43
等的號碼...

我嘗試:

public void ShowBestHours() 
    { 
     using (NorthwindDataContext db = new NorthwindDataContext()) 
     { 
      var query = 
       from z in db.Orders 
       select new Stime 
       { 
        HourTime = db.Orders.GroupBy(x => x.OrderDate.Value.Hour).Count(), 

       }; 
      foreach (var item in query) 
      { 
       Console.WriteLine("Hour : {0},Order(s) Number : {1}", item.HourTime, item.Count); 
      } 
     } 
    } 
    public class Stime 
    { 
     public int HourTime { get; set; } 
     public int Count { get; set; } 

    } 
+4

當你嘗試會發生什麼? – Guffa 2013-02-17 15:31:38

+0

小時:1,訂單編號:0 小時:1,訂單編號:0 小時:1,訂單號碼:0 等等多次...(我認爲訂單數量) – darko 2013-02-17 15:34:25

回答

2

您需要查詢更改爲

var query = 
    from z in db.Orders 
    group z by z.OrderDate.Value.Hour into g 
    select new Stime{ HourTime = g.Key, Count=g.Count() }; 

或可替代

var query = db,Orders.GroupBy (o => o.OrderDate.Value.Hour).Select (
    g => new Stime{ HourTime=g.Key, Count=g.Count() }); 

在我的Northwind的副本,所有的訂購日期值都只能追溯到所以結果就是 HourTime = 0,Count = 830.

我假設你只是試驗克與分組。嘗試像這樣按星期分組

var query = db.Orders.GroupBy (o => o.OrderDate.Value.DayOfWeek).Select (
    g => new { DayOfWeek=g.Key, Count=g.Count() }); 

這給出了更有用的結果。

1

您未在查詢中的任何位置設置Stime.Count,並且您沒有按小時正確分組。我當然沒有看到您的確切設置,但我認爲以下內容適用於您。

var query = 
    from z in db.Orders 
    group z by z.OrderDate.Value.Hour into g 
    select new Stime() { HourTime = g.Key, Count = g.Count() }; 

foreach (var item in query) 
{ 
    Console.WriteLine("Hour : {0},Order(s) Number : {1}", item.HourTime, item.Count); 
} 
1

試試這個:

public void ShowBestHours() 
{ 
    using (NorthwindDataContext db = new NorthwindDataContext()) 
    { 
     var query = db.Orders.GroupBy(x => x.OrderDate.Value.Hour).OrderByDescending(x => x.Count()).Select(x => new Stime { HourTime = x.Key, Count = x.Count() }); 

     foreach (var item in query) 
     { 
      Console.WriteLine("Hour : {0},Order(s) Number : {1}", item.HourTime, item.Count); 
     } 
    } 
}