C# 从列表中提取结果<;客户>;使用LINQ

C# 从列表中提取结果<;客户>;使用LINQ,c#,.net,linq,C#,.net,Linq,我有一份顾客名单 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")}); List

我有一份顾客名单

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")});
List cust=new List();
cust.Add(newcustomers(){ID=1,Name=“Sam”,PurchaseDate=DateTime.Parse(“01/12/2008”)});
cust.Add(newcustomers(){ID=2,Name=“Lolly”PurchaseDate=DateTime.Parse(“03/18/2008”)});
我想显示两个不同的结果,如:

年内按客户购买//按年分组并显示id、名称
年-月按客户购买//按年然后按月分组并显示id、名称

如果我想订购yr呢

更新:

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

Y-20% N-30% C-50%

按年份分组:

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);
所有这些都使用“点表示法”而不是查询表达式,因为它们非常简单——但如果需要,可以使用查询表达式


编辑:对于状态部分,只需使用。

damyou为什么你这么快,Jon。我只是在写我的答案:)这么快?问题已经提了20分钟:)不是所有人都整天坐在这里,斯基特先生;)(但我是这么做的,我想那个电话不是真的有效)如果我在这里呆了一整天,肯定不会花我20分钟来接;)(发布此问题时,我正在地铁上…)
int total = customer.Count()

var counts = customers.GroupBy( c => c.Status )
  .Select( g => new
  {
    Status = g.Key,
    TheRatio = (g.Count() * 100) / total;
  })