0

我试图返回一个月内有多少客户“注册”的结果。目前它返回每个特定日期的计数。见下图:按月计算的组数

Count for customers enrolled per day

这里是我的控制器代码:

public ActionResult About() 
     { 
      IQueryable<EnrollmentDateGroup> data = from customer in db.Customers 
                group customer by customer.EnrollmentDate into dateGroup 

                select new EnrollmentDateGroup() 
                { 
                 EnrollmentDate = dateGroup.Key, 
                 CustomerCount = dateGroup.Count() 

     }; 

任何人都可以建议我如何能有多少客户每月招收的计数?

在此先感谢。

UPDATE

我收到以下错误,当我使用:

group customer by new { customer.EnrollmentDate.Year, customer.EnrollmentDate.Month } into dateGroup 

enter image description here

+0

'通过新的集团客户{customer.EnrollmentDate.Year,customer.EnrollmentDate.Month}' –

回答

1

你需要按月份和年份,独自一人。当你通过完整的日期时,它会包含一个将会搞乱分组的日子组件。例如:

group customer by new { Year = customer.EnrollmentDate.Year, Month = customer.EnrollmentDate.Month } 

UPDATE

那是因为你绑直接设置关键看你EnrollmentDate属性格式,现在的关键是一个匿名类型,而不是一个DateTime。创建一个DateTime或者做一些不同的事情。

EnrollmentDate = new DateTime(m.Key.Year, m.Key.Month, 1), 
0

使用您的GROUPBY子句中铸造

GROUP BY CAST(MONTH(日期)AS VARCHAR(2))+ ' - ' + CAST(YEAR(日期)为varchar(4))

+0

这仅适用于使用实际的SQL。这里的OP使用LINQ to SQL,这是一个不同的野兽。 –

0

试试这个。

var result = from s in data 
      group s by new { date = new DateTime(s.EnrollmentDate.Year, s.EnrollmentDate.Month, 1)} into g 
select new { 
date = g.Key.date, 
Sum = g.Sum(x=>x.CustomerCount) 
}; 
+0

我不确定你是否可以通过新的'DateTime'进行分组,因为它在技术上是不同的对象实例,但显然可以通过分组来弥补这一点。但是,在这一点上,不需要将其包装在匿名对象中。只要按新的日期时间进行分组(s.EnrollmentDate.Year,s.EnrollmentDate.Month,1)' –