如何在组中每个月的某一天按行进行分组?

时间:2017-02-28 17:13:07

标签: sql-server entity-framework linq entity-framework-4

我有这个表DDL:

CREATE TABLE [dbo].[Audit] 
(
    [AuditId] INT          IDENTITY (1, 1) NOT NULL,
    [Entity]  INT          NOT NULL,
    [UserId]  INT          NOT NULL,
    [Note]    VARCHAR(200) NULL,
    [Date]    DATETIME     NOT NULL,
    [Action]  INT          NOT NULL,

    CONSTRAINT [PK_Audit] 
        PRIMARY KEY CLUSTERED ([AuditId] ASC)
);

我想要做的是获取一份报告,显示每天有一个组的单个UserId的活动计数(行)。

这是否可以与LINQ一起使用,或者我需要在SQL中使用编码,因为需要以某种方式从DATETIME字段中提取日期。

即使对SQL SELECT非常感激,也可以提供一些帮助和建议。

Date          Count
---------------------    
29-Feb-2018   25
28-Feb-2018   33
27-Feb-2018   11
26-Feb-2018   44

2 个答案:

答案 0 :(得分:1)

您应该避免使用关键字作为列或对象名称,因为它会使事情变得非常混乱。但是使用你的例子,这是一个非常简单的查询。

select [Date] = convert(date, a.Date)
    , [Count] = count(*)
from Audit a
group by convert(date, a.Date)

答案 1 :(得分:0)

假设您的EF模型看起来像表,您可以使用此LINQ语句:

from a in context.Audits
group a by EntityFunctions.TruncateTime(a.Date) into grp
select new
{
    Date = grp.Key,
    Count = grp.Count()
}

由于您标记了实体框架4,因此您必须使用EntityFunctions。在以后的版本中,这已更改为DbFunctions