【问题标题】:Extract results from List<Customers> using LINQ使用 LINQ 从 List<Customers> 中提取结果
【发布时间】:2009-01-21 13:11:30
【问题描述】:

我有一个客户列表

List<Customers> cust = new List<Customers>();
cust.Add(new Customers(){ID=1, Name="Sam", PurchaseDate=DateTime.Parse("01/12/2008")});
cust.Add(new Customers(){ID=2, Name="Lolly" PurchaseDate=DateTime.Parse("03/18/2008")});

我想显示 2 个单独的结果,例如:

按年份购买的客户 // 按年份分组并显示 id,name
客户在 Yr - Month 中的购买量//按年分组,然后按月分组并显示 id、name

如果我想订购年呢?

更新:

再添加一个。如果我在 Customer 类中有一个名为“Status”的字段,其中任何一个值“Y”、“N”、“C”代表是、否并取消我将如何创建查询以提供百分比为 %

Y - 20% 氮 - 30% C - 50%

【问题讨论】:

    标签: c# .net linq


    【解决方案1】:

    按年份分组:

    var groupByYear = customers.GroupBy(customer => customer.PurchaseDate.Year);
    
    foreach (var group in groupByYear)
    {
        Console.WriteLine("Year: {0}", group.Key);
        foreach (var customer in group)
        {
            Console.WriteLine("{0}: {1}", customer.ID, customer.Name);
        }
    }
    

    按年和月分组:

    var groupByYearMonth = customers.GroupBy(customer => 
         new DateTime(customer.PurchaseDate.Year, customer.PurchaseDate.Month, 1));
    foreach (var group in groupByYear)
    {
        Console.WriteLine("Year/month: {0}/{1}", group.Key.Year, group.Key.Month);
        foreach (var customer in group)
        {
            Console.WriteLine("{0}: {1}", customer.ID, customer.Name);
        }
    }
    

    订购:

    var ordered = customers.OrderBy(customer => customer.PurchaseDate.Year);
    

    所有这些都使用“点表示法”而不是查询表达式,因为它们非常简单 - 但如果您愿意,可以使用查询表达式。

    编辑:对于状态部分,只需使用David B's answer

    【讨论】:

    • 该死的,你为什么这么快,乔恩。我只是在写我的答案:)
    • 这么快?这个问题已经提出了 20 分钟 :)
    • 并不是我们所有人都整天坐在这儿,Skeet 先生;)(但我这样做了,我认为这个电话真的无效)
    • 如果我整天都在这里,我肯定不会花 20 分钟来回答 ;)(发布这个问题时我在管...)
    【解决方案2】:
    int total = customer.Count()
    
    var counts = customers.GroupBy( c => c.Status )
      .Select( g => new
      {
        Status = g.Key,
        TheRatio = (g.Count() * 100) / total;
      })
    

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      相关资源
      最近更新 更多