2016-06-15 4 views
2

Как говорится в названии, у меня есть столбец datetime в моей таблице.Entity Framwork, группа за день/неделя/месяц, работающая в datetime

Мне нужно сгруппировать по моим записям три способов, в трех различных случаях:

  1. группа по дню
  2. группы по неделям
  3. группы по месяцу

Как я могу делать эти три разных группы по заявлению в Entity Framework, с лямбда-выражением, если это возможно?

ОБНОВЛЕНИЕ: связанный вопрос как дубликат, не является реальным дубликатом. Я спрашиваю, для решения лямбда и его нет в ссылке

+1

Пробовали ли вы что-нибудь? –

+1

Возможный дубликат http://stackoverflow.com/questions/762899/linq-group-by-month-and-year-within-a-datetime-field – Sherlock

ответ

1

вы можете использовать этот метод:

var ByDayGrouped = new TestEntities().Objects.GroupBy(O => new { O.date.Year, O.date.Month, O.date.Day }).ToList(); 

var ByMonthGrouped = new TestEntities().Objects.GroupBy(O => new { O.date.Year, O.date.Month }).ToList(); 

var ByWeekGrouped = new TestEntities().Objects.GroupBy(O => (O.date.DayOfYear % 7) + M).ToList(); 
+0

Нужны ли «.Objects»? Что это? –

+0

«Объекты» - это имя моего DbSet. Это может быть что угодно, основываясь на вашем проекте. – Kahbazi

+0

Что такое переменная 'M' в запросе' ByWeekGrouped'? –

0

Используйте этот

List<MyEntitiy> list = (from e in Context.MyEntities group e by e.Date.Day into g select g).ToList(); 

за месяц заменить e.Date.Day с с e.Date.Month

За Неделя Вы должны сначала Вычислить WeekOfYear

public int GetWeekOfYear(this DateTime d) 
{ 
    GregorianCalendar c = new GregorianCalendar(); 
    return c.GetWeekOfYear(d,CalenderWeekRule.FirstDay,DayOfWeek.Sunday); 
} 

И использовать

List<MyEntitiy> list = (from e in Context.MyEntities group e by e.Date.GetWeekOfYear() into g select g).ToList(); 
0

Вы можете использовать следующий формат с помощью LINQ и лямбда-выражения

Для группы С Днем

var results = from p in db.table 
          group p.data by p.DateTime.UtcNow.Day into g 
          select new { Id = g.Key, parameters = g }; 

Для группы по неделям

var result = from p in db.table 
         group p.data by p.DateTime.UtcNow.DayOfWeek into g 
          select new { Id = g.Key, parameters = g} 

или еще

//get the 7days of the week by the below method and perform between operation 
    DateTime fromDate = DateTime.Today.Subtract(new TimeSpan(7, 0, 0, 0)); 
    DateTime today = DateTime.Today; 
    var result = from p in db.table 
         group p.data by (DbFunctions.TruncateTime(today) && DbFunctions.TruncateTime(today) >= DbFunctions.TruncateTime(fromDate)) into g 
         select new { Id = g.Key, parameters = g} 

аналогично для месяца

DateTime fromDate = DateTime.Today.Subtract(new TimeSpan(30, 0, 0, 0)); 
    DateTime today = DateTime.Today; 
    var result = from p in db.table 
         group p.data by (DbFunctions.TruncateTime(today) && DbFunctions.TruncateTime(today) >= DbFunctions.TruncateTime(fromDate)) into g 
         select new { Id = g.Key, parameters = g} 
+0

Почему «parameters = g.ToList()»? Каково его использование? Он вставляет в «параметры» все поля «таблицы»? –