2013-02-17 83 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); 
     } 
    } 
}