我怎样才能对组中的每一行进行分组?

How can I do a group by on rows with a day of month for each in the group?

我有这个 table 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 每天的 activity(行)计数。

这是否可以用 LINQ 来处理,或者我是否需要求助于 SQL 中的编码,因为需要以某种方式从 DATETIME 字段中提取日期。

一些帮助和建议,即使 SQL SELECT 将不胜感激。

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

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

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

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

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

由于您标记了 entity framework 4,因此您必须使用 EntityFunctions。这在后来的版本中更改为 DbFunctions