2013-12-12 74 views
0

這一切都源於查詢Google Analytics數據。對於基本查詢,改變的主要因素是維度度量。返回的對象是一種名爲GaData的類型,並且您需要的實際結果位於GaData.Rows中。將二維數組轉換爲對象c#

GaData.Rows的格式如下:

Rows

有將首先爲每個維度一排,在這個例子中有一排「新訪問者」和第二行的「回訪者」。在這些行內將是另一組包含Dimension值的行,然後是您指定的每個度量標準(我只要求一個度量標準)。

到目前爲止類設置我有如下:

public class Results 
{ 
    public List<Dimension> Dimensions { get; set; } 
} 

public class Dimension 
{ 
    public string Value { get; set; } 
    public List<Metric> Metrics { get; set; } 
} 

public class Metric 
{ 
    public int Value { get; set; } 
} 

最後,也許它只是晚了,我的腦子有點問題,但我有困難的一點點轉換這個數據進入Results類型,我認爲是因爲有多個層次。任何幫助?

編輯

我添加下面我是如何結束的答案完成它,如果任何人有一個更簡潔例子讓我知道!

回答

1

我最終創建了一個名爲ToDimensionResults()的GaData擴展方法。我不確定是否能夠使用LINQ來完成此操作,因爲我需要知道某些行的索引(如維度值)。所以我選擇了循環維度和指標並手動創建類。注意:如果您在查詢中未包含維度,則結果不包含維度值,只包含一系列度量標準,因此可以適應這種可能性。

public static Results ToDimensionResults(this GaData ga) 
    { 
     var results = new Results(); 
     var dimensions = new List<Dimension>(); 
     List<Metric> metrics; 
     var value = ""; 
     var metricStartIndex = 1; 

     for (var i = 0; i < ga.Rows.Count; i++) 
     { 
      //accomodate data without dimensions 
      if (!string.IsNullOrEmpty(ga.Query.Dimensions)) 
      { 
       value = ga.Rows[i][0].ToString(); 
      } 
      else 
      { 
       value = ""; 
       metricStartIndex = 0; 
      } 

      metrics = new List<Metric>(); 

      for (var x = metricStartIndex; x < ga.Rows[i].Count; x++) 
      { 
       metrics.Add(new Metric 
       { 
        Value = Convert.ToInt32(ga.Rows[i][x]) 
       }); 
      } 


      dimensions.Add(new Dimension 
      { 
       Value = value, 
       Metrics = metrics 
      }); 
     } 

     results.Dimensions = dimensions; 

     return results; 
    } 
+0

您可以將自己的答案標記爲答案。 :) –

+0

我會的,它讓我等到明天...... :) – Goose

1

嗯,我不知道Rows是在Ga裏面,但也許這會指向你正確的方向。

var results 
    = GaData.Rows.Select(x => x.Rows.Select(y => 
      new Dimension { Value = y.Value, Metrics = new List<Metric> {innerRow.Metric}})); 
+0

有幫助,但我不知道是否可以使用LINQ來完成我需要的功能,因爲我需要知道某些行的索引,請參閱我的答案。 – Goose