Используя LINQ to SQL group, суммируйте и агрегируйте все вместе - PullRequest
2 голосов
/ 18 августа 2010

У меня есть два стола ученики и оригами. У Оригами есть таблица «Внешний ключ от студентов». Каждый студент может сделать одно или несколько оригами за каждый месяц.

Образцы данных студентов:

StudentId, FirstName, LastName

  • 187, Джон, Маслоу
  • 196, хрусталь, капюшон
  • 195, Сара, Льюис

Пример данных оригами:

OrigamiId, StudentId, CreationDate, NumberOfOrigami

  • 1, 187, 17.05.2010, 13:06:55, 1
  • 2, 196, 22.05.2010 13:31:28, 2
  • 3, 187, 18.06.2010 13:51:40, 2
  • 4, 187, 19.06.2010 14:13:35, 1
  • 5, 196, 17.07.2010 14:19:44, 3
  • 6, 196, 19.07.2010 14:23:02, 2
  • 7, 195, 20.07.2010 15:04:15, 3

и многие другие записи в этом формате.

Я хотел бы получить общее количество оригами каждого студента в месяц. Нечто похожее на следующее:

  • Имя, январь 2010 г., февраль 2010 г. и т. Д.
  • Джон Маслоу, 2, 3
  • Хрустальный капюшон, 4, 5
  • Сара Льюис, 6, 5

Спасибо.

Обновление 1

    Dim query = From st In db.Students _
                 Join or In db.Origami On or.StudentId Equals st.StudentId _
                 Group By or.StudentId Into TotalOrigami = Sum(or.NumberOfOrigami) _
                 Select StudentId, TotalOrigami

Этот запрос дает только общее оригами каждого студента. Но я хочу ежемесячный счетчик оригами для каждого студента. Любое предложение приветствуется.

Ответы [ 2 ]

0 голосов
/ 21 августа 2010

Вот рабочий запрос:

Dim query = From st In db.Students _ 
                 Join ori In db.Origami On ori.StudentId Equals st.StudentId _ 
                 Group By key = New With {ori.Student, .MonthYear = (ori.CreationDate.Value.Month & "/" & tr.CreationDate.Value.Year)}  Into TotalOrigami = Sum(ori.NumberOfOrigami) _ 
                 Select key.Student.FirstName,key.Student.LastName,key.MonthYear,TotalOrigami  
0 голосов
/ 18 августа 2010

Можно создать дополнительное свойство, которое содержит только месяц / год для объекта оригами. и затем используйте запрос ниже

            var q = from st in db.Students 
                    join or in db.Origami on or.StudentId equals st.StudentID
                    group st by new { st.StudentId, or.MonthYear } into g
                    select new { g.Key.StudentId, g.Key.MontYear, Total = g.Count() };

Я только что увидел, что пример на C #, но я надеюсь, что вы справитесь.

...