2012-05-24 38 views
1

我可以使用facebook c#sdk v 6.14成功执行多查询fql,这要感谢Prabir's博客,但在解析结果时需要帮助。我搜索并尝试了很多方法无济于事。我知道这是一个简单的语法问题,但我对c#和JSON相当陌生。Facebook C#SDKv6如何解析多查询结果FQL

任何帮助非常感谢! 谢谢, 乍得

我的代码:

var fb = new FacebookClient(this.FacebookAccessToken); 
      dynamic resultsMQFQL = fb.Get("fql", 
          new 
          { 
           q = new 
           { 
            friendsMovies = "SELECT page_id, uid FROM page_fan WHERE type='MOVIE' AND uid IN (SELECT uid2 FROM friend WHERE uid1=me()) ORDER BY page_id", 
            movieDetails = "SELECT page_id, name, pic, fan_count, categories, genre, starring, release_date FROM page WHERE page_id IN (SELECT page_id FROM #friendsMovies) ORDER BY fan_count DESC", 
           } 
          }); 

结果:

{"data":[ 
    {"name":"friendsMovies", 
     "fql_result_set": 
      [{"page_id":105638652803531,"uid":796419451}, 
      {"page_id":113271808686307,"uid":796419451}]}, 

    {"name":"movieDetails", 
     "fql_result_set":[ 
      {"page_id":105638652803531,"name":"Fear and Loathing in Las Vegas"}, 
      {"page_id":113271808686307,"name":"Fletch"} 
     ] 
    } 
]} 

尝试在解析:

foreach (dynamic row in resultsMQFQL.data.fql_result_set) 

错误:

'Facebook.JsonArray' does not contain a definition for 'fql_result_set' 
+0

哦,我试过这个var comments = response [0] .fql_result_set; var users = response [1] .fql_result_set; [链接](http://stackoverflow.com/questions/6459292/how-do-i-use-the-result-from-fb-fql-multiquery/6459569#6459569),并得到了同样的错误。 –

回答

1

好吧,想通了......忘了我可以在立即窗口调试时快速尝试各种组合......我说我在编码方面相当新颖吗? :)

public void FBMQFQL() 
     { 
      var fb = new FacebookClient(this.FacebookAccessToken); 
      dynamic resultsMQFQL = fb.Get("fql", 
          new 
          { 
           q = new 
           { 
            friendsMovies = "SELECT page_id, uid FROM page_fan WHERE type='MOVIE' AND uid IN (SELECT uid2 FROM friend WHERE uid1=me()) ORDER BY page_id", 
            movieDetails = "SELECT page_id, name, pic, fan_count, categories, genre, starring, release_date FROM page WHERE page_id IN (SELECT page_id FROM #friendsMovies) ORDER BY fan_count DESC", 
           } 
          }); 

      //To access a direct value: resultsMQFQL.data[0].fql_result_set[0].page_id 

      var friendsMovies = resultsMQFQL.data[0].fql_result_set; 
      var movieDetails = resultsMQFQL.data[1].fql_result_set; 

      if (resultsMQFQL == null) 
      { 
       //return null; 
      } 
      else 
      { 
       //Construct the new, formated, merged datatable to store the results the way we want them 
       DataTable dtMyFriendsMovies = new DataTable(); 
       dtMyFriendsMovies.Columns.Add("MovieID"); 
       dtMyFriendsMovies.Columns.Add("FriendUserID"); 

       foreach (dynamic row in friendsMovies) 
       { 
        //Add New DataRow to new DataTable 
        DataRow drRow = dtMyFriendsMovies.NewRow(); 

        //Get various values from original JSON Friend List returned 
        drRow["MovieID"] = row.page_id; 
        drRow["FriendUserID"] = row.uid; 

        //Add New Row to New Resulting Data Table 
        dtMyFriendsMovies.Rows.Add(drRow); 
       } 

       //MovieDetails 
       DataTable dtMovies = new DataTable(); 

       dtMovies.Columns.Add("movieID"); 
       dtMovies.Columns.Add("name"); 
       dtMovies.Columns.Add("pic"); 
       dtMovies.Columns.Add("fan_count"); 
       dtMovies.Columns.Add("genre"); 
       dtMovies.Columns.Add("starring"); 
       dtMovies.Columns.Add("release_date"); 

       foreach (dynamic row in movieDetails) 
       { 
        //Add New DataRow to new DataTable 
        DataRow drRow = dtMovies.NewRow(); 

        //Get various values from original JSON Friend List returned 
        drRow["movieID"] = row.page_id; 
        drRow["name"] = row.name; 
        drRow["pic"] = row.pic; 
        drRow["fan_count"] = row.fan_count; 
        drRow["genre"] = row.genre; 
        drRow["starring"] = row.starring; 
        drRow["release_date"] = row.release_date; 

        //Add New Row to New Resulting Data Table 
        dtMovies.Rows.Add(drRow); 
       } 
       //return dtMyFriendsMovies; 
      } 
     } //FB FQL