2012-09-21 86 views
0

我用這讓我的所有記錄的日期排序:通過與該LINQ的GroupBy使用

Dim myData = db.Tbl_Exercises.Where(Function(x) x.Exercise_Employee_ID).OrderBy(Function(x) x.Exercise_Create_Date) 

我循環:

For Each i As Tbl_Exercise In myData 

     data.Add(New Object() {i.Tbl_Exercise_Type.ExType_Desc, i.Exercise_Duration}) 

    Next 

我怎樣才能通過i.Tbl_Exercise_Type.ExType_Desc組所以不有重複?

我嘗試這樣做:

Dim myData = db.Tbl_Exercises.Where(Function(x) x.Exercise_Employee_ID).GroupBy(Function(x) x.Exercise_Type_ID) 

但是,我不知道怎麼我的循環中訪問的變量。

謝謝。

編輯:

<EmployeeAuthorize()> 
Function ExercisePieChartData() As JsonResult 

    ' get current employee's id 
    Dim db1 As EmployeeDbContext = New EmployeeDbContext 
    Dim user1 = db1.Tbl_Employees.Where(Function(e) e.Employee_EmailAddress = User.Identity.Name).Single() 
    Dim empId = user1.Employee_ID 

    Dim activityGroups = db.Tbl_Exercises.Where(Function(x) x.Exercise_Employee_ID = empId).GroupBy(Function(x) x.Exercise_Type_ID) 

    Dim data = New List(Of Object) 

    ' columns (headers) 
    data.Add(New Object() {"Type", "Duration"}) 

    ' Iterate through each collection of activities, grouped by activity types 
    For Each group In activityGroups 

     ' Iterate through each Tbl_Exercise in the group 
     For Each activity In group 

      ' Do something with an individual element 
      data.Add(New Object() {activity.Tbl_Exercise_Type.ExType_Desc, activity.Exercise_Duration}) 

     Next 

    Next 

    Return Json(data, JsonRequestBehavior.AllowGet) 

End Function 

編輯:

' Iterate through each collection of activities, grouped by activity types 
    For Each group In activityGroups 

     Dim type = "" 
     Dim duration = 0 

     ' Iterate through each Tbl_Exercise in the group 
     For Each activity In group 

      ' Do something with an individual element 
      type = activity.Tbl_Exercise_Type.ExType_Desc 
      duration += activity.Exercise_Duration 

     Next 

     data.Add(New Object() {type, duration}) 

    Next 
+0

我想我糊塗了,你說你用'ExType_Desc'希望集團,但你的榜樣使用'Exercise_Type_ID',你想要分組哪一個? – user7116

+0

請注意'ExType_Desc'屬於'Tbl_Exercise_Type'並且可以通過'i.Tbl_Exercise_Type.ExType_Desc'進行訪問。 – user1477388

+0

就這樣,我明白了,對於每個員工,您是否試圖按照他們正在執行的活動類型對他們的鍛鍊持續時間進行收集? – mclark1129

回答

1

注:您的例子並不完全清楚,所以我打算做什麼幾個假設你正在試圖解決我的問題。隨着更多細節的提供,我會根據需要對其進行修改。

從它看起來像,每個員工你試圖得到他們已經完成的鍛鍊類型的集合,並且每種類型的鍛鍊,你還需要收集他們花費的時間長度這些活動。

我要去假設,在Tbl_Exercises行看起來是這樣的:

Public Class Tbl_Exercise 

    Public Property Exercise_Employee_ID As Integer 
    Public Property Exercise_Type_ID As Integer 
    Public Property Exercise_Type_Desc As String 
    Public Property Exercise_Duration As Integer 

End Class 

讓你在最後的嘗試是非常接近,你只需要實際使用分組一旦你創建它。

GroupBy方法在這裏返回的實際上是IGrouping(Of Integer, Tbl_Exercise),其中關鍵是Exercise_Type_ID,並且該值是按鍵分組的行的集合。要訪問他們的很簡單,你只要認爲分組作爲一種嵌套集合:

Dim activityGroups = db.Tbl_Exercises.Where(Function(x) x.Exercise_Employee_ID = employeeId).GroupBy(Function(x) x.Exercise_Type_ID) 

    ' Iterate through each collection of activities, grouped by activity types 
    For Each group In activityGroups 

     ' Iterate through each Tbl_Exercise in the group 
     For Each activity In group 

      ' Do something with an individual element 
      Console.WriteLine(activity.Exercise_Duration) 

     Next 

    Next 

很明顯,你可能想要做的事比打印出個人藏品不同,你可能希望將數據綁定每個分組爲自己DataGrid,以便您可以單獨顯示它們。您可能希望按日期對每個分組進行排序,或者您只需要每組中的第一個元素。一旦你瞭解了分組的結構,應該很容易地完成你正在尋找的東西。

編輯:

如果你只是希望在聚集分組的一些領域,這是很容易做到,而無需訴諸遍歷結果。只需您GroupBy的頂部添加調用Select將讓你的項目的結果到您的期望合計形式:

Dim data = db.Tbl_Exercises _ 
       .Where(Function(x) x.Exercise_Employee_ID = empId) _ 
       .GroupBy(Function(x) x.Exercise_Type_Desc) _ 
       .Select(Function(x) 
          Return New With { 
           ' x.Key will give you access to the value that the grouping is grouped by 
           .Exercise_Type_Desc = x.Key, 
           .TotalDuration = x.Sum(Function(y) y.Exercise_Duration) 
          } 
         End Function) 
+0

謝謝,我會在星期一嘗試。我正在尋找的答案似乎在你必須循環訪問的部分。 – user1477388

+0

它似乎沒有任何效果。 'activity.Tbl_Exercise_Type.ExType_Desc'中的項目仍然重複列出,它們似乎沒有分組。我用整個行動編輯了我的問題。 – user1477388

+0

這是一個它在做什麼的例子http://postimage.org/image/ejuh6jeex/。我改變了我的查詢'Dim activityGroups = db.Tbl_Exercises.Where(Function(x)x.Exercise_Employee_ID = empId).GroupBy(Function(x)x.Tbl_Exercise_Type.ExType_Desc)''但是這就是它的功能。謝謝你的幫助。 – user1477388