LINQ.Группировка по дням.Как это сделать легко? - PullRequest
3 голосов
/ 17 июня 2010

Я не могу найти какую-либо хорошую ссылку на это.У меня много данных в SQL с датами.Поэтому я хотел сделать линейный график, чтобы показать эти данные с течением времени.Если я хочу показать его в течение нескольких дней, тогда мне нужно сгруппировать по дням ... Но LOGDATE - это полная дата, а не ДЕНЬ.

Итак, у меня есть это ниже, но LINQ не делаетне знаю, что такое свойство DayOfYear ...

 var q = from x in dc.ApplicationLogs
                let dt = x.LogDate
                group x by new { dayofyear = dt.Value.DayOfYear } into g
                select new
                {
                    iCount = g.Count(),
                    strDate = g.Key
                };

Ответы [ 4 ]

2 голосов
/ 16 июня 2014

Вы можете использовать DbFunctions.TruncateTime :

, чтобы вернуть данную дату с очищенной временной частью

var q = from x in dc.ApplicationLogs
        let dt = DbFunctions.TruncateTime(x.LogDate)
        group x by dt into g
        select new
        {
            iCount = g.Count(),
            strDate = g.Key
        };
2 голосов
/ 21 августа 2010

Вы хотите, чтобы .Date получил часть даты DateTime, а не DayOfyear, если только вы не намеренно пытаетесь ввести в группу один и тот же день года из каждого года.

0 голосов
/ 07 марта 2012

Вот, пожалуйста,

let d = new DateTime(n.time.Year, n.time.Month, n.time.Day) group n by d into grp select grp
0 голосов
/ 17 июня 2010

Почему вы используете:

    let dt = x.LogDate
    group x by new { dayofyear = dt.Value.DayOfYear } into g

вместо просто:

    group x by x.LogDate.Value.DayOfYear into g

Я не уверен в этом, но возможно использование анонимного объекта, подобного тому, что в вашем предложении group by портит L2S.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...