LINQ: Group by month and year within a datetime field

前端 未结 5 1131
轻奢々
轻奢々 2020-12-08 00:38

I have a table with a datetime field. I want to retrieve a result set grouped by the month/year combination and the number of records that appear within that month/year. H

相关标签:
5条回答
  • 2020-12-08 01:00
    var grouped = from p in posts
         group p by new { month = p.Create.Month,year= p.Create.Year } into d
         select new { dt = string.Format("{0}/{1}",d.Key.month,d.Key.year), count = d.Count() };
    

    Here's the list of DateTime functions available in LINQ. For this to work you'll also need to understand multi-column grouping

    ordered descending

    var grouped = (from p in posts 
      group p by new { month = p.Create.Month,year= p.Create.Year } into d 
      select new { dt = string.Format("{0}/{1}",d.Key.month,d.Key.year), count = d.Count()}).OrderByDescending (g => g.dt);
    
    0 讨论(0)
  • 2020-12-08 01:02

    This Site has an example that should fill your need.

    This is the basic syntax:

    from o in yg
    group o by o.OrderDate.Month into mg
    select new { Month = mg.Key, Orders = mg }
    
    0 讨论(0)
  • 2020-12-08 01:07

    Here is a simple solution for grouping in DateTime.

    List<leaveallview> lav = new List<leaveallview>();
    lav = dbEntity.leaveallviews.Where(m =>m.created==alldate).ToList();
    dynamic lav1 = lav.GroupBy(m=>m.created.Value.GetDateTimeFormats()).FirstOrDefault().ToList();
    
    0 讨论(0)
  • 2020-12-08 01:14

    you could also do it this way

    from o in yg
    group o by o.OrderDate.ToString("MMM yyyy") into mg
    select new { Month = mg.Key, Orders = mg }
    

    Your result will be

    {Jan 2014, 25} {Feb 2015, 15} etc...

    0 讨论(0)
  • 2020-12-08 01:19

    This is for those who are trying to accomplish the same but using lambda expressions.

    Assuming that you already have a collection of entities and each entity has OrderDate as one of its properties.

    yourCollection
    // This will return the list with the most recent date first.
    .OrderByDescending(x => x.OrderDate)
    .GroupBy(x => new {x.OrderDate.Year, x.OrderDate.Month})
    // Bonus: You can use this on a drop down
    .Select(x => new SelectListItem
            {
               Value = string.Format("{0}|{1}", x.Key.Year, x.Key.Month),
               Text = string.Format("{0}/{1} (Count: {2})", x.Key.Year, x.Key.Month, x.Count())
            })
    .ToList();
    

    If you do not need the collection of SelectListItem then just replace the select with this one:

    .Select(x => string.Format("{0}/{1} (Count: {2})", x.Key.Year, x.Key.Month, x.Count()))
    
    0 讨论(0)
提交回复
热议问题