选择多个日期的计数

时间:2009-09-25 13:45:29

标签: c# linq-to-sql

我有3个表:People,Group和PeopleGroup连接表。 PeopleGroup有一个开始和结束日期。使用linq-to-sql,我正在尝试编写一个查询,该查询将在指定的日期范围内为任何给定组提供1周间隔组成员的计数。最终结果看起来像(1月份的x组):

Date        People Count
1/3/2009    445
1/10/2009   420
1/17/2009   426
1/24/2009   435
1/31/2009   432

这可能吗?还是我需要为每个组/周组合编写单独的查询?

3 个答案:

答案 0 :(得分:1)

我最近不得不做类似的事情。经过一番研究后,我发现用c#处理数据会更容易。

在您的情况下,您可以在规范日期的数据和群组中计算一个日期的规范日期。

答案 1 :(得分:0)

这就是我在T-SQL中所做的。看看你是否可以翻译成LINQ发言。

SELECT 
    DATEADD (D, -1 * DATEPART (dw, DateTimeColumn), DateTimeColumn), 
    COUNT (*)
FROM DBO.UserTable
GROUP BY 
    DATEADD (D, -1 * DATEPART (dw, DateTimeColumn), DateTimeColumn)

答案 2 :(得分:0)

也许你可以尝试这样的事情。我不知道它是否适用于LINQ to SQL,但它适用于LINQ to objects。本例中的第一天是本例中的星期日,但可以更改。

        class Foo
        {
            public DateTime Date { get; set; }
        }

        var foos = new[] 
            {
                new Foo { Date = DateTime.Now },
                new Foo { Date = new DateTime(2009, 7, 3)},
                new Foo { Date = new DateTime(2009, 6, 20)},
                new Foo { Date = new DateTime(2009, 6, 21)},
                new Foo { Date = new DateTime(2009, 7, 2)}
            };

            var query = from foo in foos
                        group foo by foo.Date.AddDays(-(int)foo.Date.DayOfWeek) into g
                        select new
                        {
                            Count = g.Count(),
                            Date = g.Key
                        };

            foreach (var foo in query)
                Console.WriteLine("People count: {0} Date: {1}", foo.Count, foo.Date);