LINQ-to-SQL - объект «Группа за неделей в дате» - PullRequest
2 голосов
/ 19 октября 2011

Я пишу запрос в LINQ-to-SQL, и в этом запросе есть столбец Date.Я хочу сгруппировать результаты по «Неделе».Как бы я сделал это в LINQ-to-SQL?

Спасибо

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Предполагая григорианский календарь, правило недели "первый день" и первый день недели - понедельник.

Правило недели первого дня:

Указывает, что первая неделягод начинается в первый день года и заканчивается до следующего назначенного первого дня недели

int firstDayOfWeek = (int)DayOfWeek.Monday;
var q = 
    from u in TblUsers
    let date = u.CreateDate.Value
    let num = date.DayOfYear - 1
    let num2 = ((int)date.DayOfWeek) - (num % 7)
    let num3 = ((num2 - firstDayOfWeek) + 14) % 7
    let week = (((num + num3) / 7) + 1)
    group u by week into g
    select new 
    {
        Week = g.Key,
        Count = g.Count ()
    };
0 голосов
/ 19 октября 2011

Надеюсь, это поможет:

    var d1 = new DateTime(1990, 1, 1);
    var d2 = new DateTime(1990, 1, 2);
    var d3 = new DateTime(1990, 1, 11);
    var d4 = new DateTime(1990, 1, 12);

    var records = new[] { 
        new { date = d1, freq = 1 }, 
        new { date = d2, freq = 2 }, 
        new { date = d3, freq = 3 }, 
        new { date = d4, freq = 4 } 
    };

    //ticks * WeekDays * DayHours * HourMins * MinSecs
    var weekTicks = (Int64)10000000 * 7 * 24 * 60 * 60;   
    var res = records.GroupBy(x => x.date.Ticks / weekTicks)
             .Select(x => new { week=x.Key ,sum=x.Sum(y=>y.freq)});

И вот результат:

[0] = {неделя = 99085, сумма = 3}

[1] = {неделя = 99086, сумма = 7}

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