我正在制作报告,以便在C#中使用LINQ显示客户。我想表明不。每种类型的客户。
有3种类型的客户注册,客人和经理。我希望按客户的注册日期和客户类型进行分组。即如果今天有3位客人,4位注册人员和2名经理人员。明天4,5和6是注册的。然后报告应显示当天注册的客户数量。每种类型的单独行。
DATE TYPEOF CUSTOMER COUNT
31-10-2013 GUEST 3
31-10-2013 REGISTERED 4
31-10-2013 MANAGER 2
30-10-2013 GUEST 5
30-10-2013 REGISTERED 10
30-10-2013 MANAGER 3
就像这样。
var subquery = from eat in _customerRepo.Table
group eat by new { yy = eat.CreatedOnUTC.Value.Year, mm = eat.CreatedOnUTC.Value.Month, dd = eat.CreatedOnUTC.Value.Day } into g
select new { Id = g.Min(x => x.Id) };
var query = from c in _customerRepo.Table
join cin in subquery.Distinct() on c.Id equals cin.Id
select c;
通过上述查询,我获得了当天注册的最小人群 提前致谢
答案 0 :(得分:24)
var query = _customerRepo.Table
.GroupBy(c => new {Date = c.Date.Date, Type = c.TypeOfCustomer})
.Select(g => new
{
Date = g.Key.Date,
Type = g.Key.Type,
Count = g.Count
}
)
.OrderByDescending (r = r.Date);
答案 1 :(得分:1)
var query = from c in _customerRepo.Table
group c by new { c.TypeOfCustomer, c.Date } into g
orderby g.Key.Date descending,
g.Key.TypeOfCustomer == "GUEST" ? 1 :
g.Key.TypeOfCustomer == "REGISTERED" ? 2 : 3
select new {
g.Key.Date,
g.Key.TypeOfCustomer,
Count = g.Count()
};
如果每日结果不需要第二次订购,则可以删除第二次订购>注册>管理器:
var query = from c in _customerRepo.Table
group c by new { c.TypeOfCustomer, c.Date } into g
orderby g.Key.Date descending
select new {
g.Key.Date,
g.Key.TypeOfCustomer,
Count = g.Count()
};