2015-05-26 152 views
-1

我正在嘗試爲資源規劃配置報告工具。我有一個JSON對象,其中包含有關我的週期(周)以及該時期內某個人的角色/經驗(數字)的信息。計算數據組的平均數

我有兩個人,戴夫和吉姆。在第1階段(第1周),他們都在同一隊(Tango)和第2階段(第2周),只有Dave在一個隊伍中。

如何使用LINQ爲每個時期的每個團隊計算(並返回)平均經驗值?因此,返回值將是:

Week 1: 2.5 
Week 2: 3 

我的JSON對象看起來是這樣的:

"persons": [ 
     { 
      "id": "974d5090-5cf0-4742-a773-cbc17eaa3362", 
      "periods": [ 
       { 
        "periodName": "Week1", 
        "teamName": "Tango", 
        "roleName": "SoftwareEngineerII", 
        "roleExperience": "2", 
        "id": "cc1f6e14-40f6-4a79-8c66-5f3e773e0929" 
       }, 
       { 
        "periodName": "Week2", 
        "teamName": "Tango", 
        "roleName": "SoftwareEngineerIII", 
        "roleExperience": "3", 
        "id": "bc121b26-b020-4029-8a95-b92cb333bc90" 
       } 
      ], 
      "personName": "Dave" 
     }, 
     { 
      "id": "341aeea2-4bf1-4e81-a03e-9bff7babad79", 
      "periods": [ 
       { 
        "periodName": "Week1", 
        "teamName": "Tango", 
        "roleName": "SoftwareEngineerIII", 
        "roleExperience": "3", 
        "id": "db7b642c-4502-4a59-8a32-b5bae5ed5195" 
       }, 
       { 
        "periodName": "Week2", 
        "teamName": "-", 
        "roleName": "-", 
        "roleExperience": "-", 
        "id": "6d9a083b-8762-4a37-a659-e9c8bf5baeb5" 
       }, 

      ], 
      "personName": "Jim" 
     }, 
     ... 
    ] 

回答

0

您需要將數據投射到不同時期和年。過濾掉沒有有效時間的時間段並將它們組合起來,這樣您就可以取得平均時間。

var query = Enumerable.From(data.persons) 
    .SelectMany(
     "$.periods", 
     "{ periodName: $$.periodName, roleExperience: Number($$.roleExperience) }") 
    .Where("!isNaN($.roleExperience)") 
    .GroupBy(
     "$.periodName", 
     "$.roleExperience", 
     "{ Period: $, Average: $$.Average() }") 
    .ToArray();