2010-08-18 8 views
2

J'ai deux tables Students et Origami. Origami a la table des clés étrangères des étudiants. Chaque étudiant peut faire un ou plusieurs origami pour chaque mois.Utilisation du groupe LINQ to SQL, somme et agrégation tous ensemble

élèves de l'échantillon des données:

StudentID, FirstName, LastName

  • 187, John, Maslow
  • 196, Crystal, capot
  • 195, Sarah, Lewis

Origami données de l'échantillon:

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, 7/17/2010 2:19:44 PM, 3
  • 6, 196, 7/19/2010 2:23:02 PM, 2
  • 7, 195, 7/20/20 10 03:04:15 PM, 3

et beaucoup plus d'enregistrements comme ce format.

Je voudrais calculer le nombre total d'origami de chaque étudiant par mois. Quelque chose qui ressemble à ce qui suit:

  • Nom, Jan/2010, février/2010 et ainsi de suite
  • John Maslow, 2, 3
  • cristal Hood, 4, 5
  • Sarah Lewis, 6 , 5

Merci.

mise à jour Un

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 

Cette requête ne donnent que origamis total de chaque élève. Mais je veux un compte mensuel d'origami pour chaque étudiant. Toute suggestion est welcom.

+0

S'il vous plaît voir ma mise à jour One. J'ai inclus la requête que j'ai essayée jusqu'ici. – Narazana

Répondre

0

requête de travail est ici:

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

Il est possible de créer une propriété supplémentaire qui ne contient que le mois/l'année sur l'objet origami. et puis utilisez la requête ci-dessous

  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() }; 

Je viens de voir que l'exemple est en C# mais j'espère que vous passerez.

+0

Pouvez-vous me donner le lien vers l'exemple que vous venez de voir? THX. – Narazana

+0

Je l'ai moi-même créé avec quelques articles et un projet-test de moi-même –

+0

J'ai utilisé ces articles: http://weblogs.asp.net/zeeshanhirani/archive/2008/05/07/group-by-multiple-columns-in -linq-à-sql.aspx et http://msdn.microsoft.com/en-us/vbasic/bb737926.aspx#grpbymult –