【问题标题】:Linq Getting Customers group by date and then by their typeLinq 按日期和类型获取客户组
【发布时间】:2013-10-31 18:13:40
【问题描述】:

我正在生成报告以向客户展示在 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;

通过上述查询,我​​得到了当天注册的最少客户 提前致谢

【问题讨论】:

  • _customerRepo.Table.GroupBy(x=>new {x.Date,x.Type}); 你将把它们按两个属性分组

标签: c# asp.net-mvc-3 linq


【解决方案1】:
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);

【讨论】:

  • 如果我想从表格中取出每一列怎么办!?
  • @Nitinvarpe 你是什么意思?
  • 我想在报告中显示一些其他常见的客户属性,但不想按这些参数分组。或者我可以为 Igrouping 编写扩展方法,例如 g
  • 我相信是g.Count(),而不是g.Count
【解决方案2】:
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()
            };

【讨论】:

  • 它的工作,但现在如果我想从表中取出每一列!?
  • @Nitinvarpe 您只能选择分组键和聚合值。
  • 是否有任何解决方案来选择所有列,即他们的电话号码、地址、电子邮件 ID?
  • @Nitinvarpe 您想在第一行显示哪封电子邮件,如果您在第一行有三位客人?
  • 事情是我有一些不同的属性分配给客户。我想展示我只给你一个我认为是错误的例子所以请原谅!!!
猜你喜欢
  • 1970-01-01
  • 2021-05-21
  • 2012-07-15
  • 2016-03-23
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
相关资源
最近更新 更多