我有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
这可能吗?还是我需要为每个组/周组合编写单独的查询?
答案 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);