查询以获取每小时的所有操作

时间:2013-02-17 15:29:53

标签: c# sql linq

我想运行并打印一个查询,显示一天中每小时的订单数量(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; }

    }

3 个答案:

答案 0 :(得分: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副本中,所有OrderDate值都只是日期,所以结果就是这样 HourTime = 0,Count = 830.

我假设你只是在尝试分组。尝试按照这样的一周分组

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

,它提供了更有用的结果。

答案 1 :(得分: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);
}

答案 2 :(得分: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);
        }
    }
}