2010-08-18 79 views
2

我有兩個表Students和Origami。摺紙有學生表的外鍵。每個學生可以爲每個月製作一個或多個摺紙。使用LINQ to SQL組,將所有數據彙總在一起

學生樣本數據:

StudentId,名字,姓氏

  • 187,約翰,馬斯洛
  • 196,水晶,胡德
  • 195,薩拉,劉易斯

摺紙樣品數據:

OrigamiId,StudentId,CreationDate,NumberOfOrigami

  • 1,187,2010年5月17日下午1點06分55秒,1
  • 2,196,2010年5月22日下午1點31分28秒,2
  • 3,187,6/18/2010下午1點51分40秒,2
  • 4,187,2010年6月19日下午二點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 3:04:15 PM,3

以及更多類似該格式的記錄。

我想每個學生每月摺紙的總數。東西看起來像下面這樣:

  • 名稱,揚/ 2010,二月/ 2010等
  • 約翰·馬斯洛,2,3
  • 水晶罩,4,5個
  • 薩拉·劉易斯,6 ,5

謝謝。

更新一個

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 

這個查詢只給每個學生的總摺紙。但是我想每個學生每月都要摺紙。任何建議是歡迎。

+0

請參閱我的更新一個。我包含了迄今爲止我嘗試過的查詢。 – Narazana 2010-08-18 17:38:58

回答

0

這裏的工作查詢:

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

可以創建一個只包含摺紙對象的月/年的額外屬性。然後使用下面的查詢

  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#中,但我希望你能通過。

+0

可以給我剛纔看到的例子的鏈接嗎?謝謝。 – Narazana 2010-08-18 18:29:09

+0

我自己用一些文章和我自己的測試項目創建了它 – 2010-08-18 18:50:34

+0

我使用了這些文章:http://weblogs.asp.net/zeeshanhirani/archive/2008/05/07/group-by-multiple-columns-in -linq-to-sql.aspx和http://msdn.microsoft.com/en-us/vbasic/bb737926.aspx#grpbymult – 2010-08-19 10:24:15