在客户端启动multiquery会导致解析器错误

时间:2011-02-28 16:13:11

标签: facebook facebook-c#-sdk facebook-fql fql.multiquery

我在c#SDK中遇到以下问题:当我尝试在我的桌面应用程序中使用以下字符串运行多查询时(搜索共享朋友的ID对)我得到一个解析器错误:

string strCommonFriendsQuery = "{
        \"user_friends\":\"SELECT uid2 FROM friend WHERE uid1 = me()\", 
        \"mutual_friends\":\"SELECT uid1, uid2 FROM friend WHERE uid1 IN (SELECT uid2 FROM   #user_friends) AND uid2 IN (SELECT uid2 FROM #user_friends)\"
        }";

        fb.Query(strCommonFriendsQuery);

分析器错误:位置0处意外的“{”。

如果我粘贴它,相同的字符串(没有引号前的转义序列)可以工作 http://developers.facebook.com/docs/reference/rest/fql.multiquery/ 但不是 http://developers.facebook.com/docs/reference/rest/fql.query/ 所以问题是我需要将其作为多查询启动而不是作为查询 - 现在我想问的是:

是否可以使用SDK的 Facebook.FacebookClient.Query 函数以某种方式处理多查询,或者我是否必须编写一个可以执行此操作的函数?据我所知,我唯一需要改变的是它连接的地址。如果是这样,是否可以在下一个SDK版本中添加?

2 个答案:

答案 0 :(得分:2)

以下是firepol的答案的替代方案,其中包含命名查询:

var queries = 
    new Dictionary<string, object>
    {
        { "FamDamly", "select uid from family where profile_id = me()" },
        { "FamDetails", "select uid, first_name from user where uid in #FamDamly" }
    };
client.Get(queries);

答案 1 :(得分:1)

要使用对第一个查询的引用(例如问题中的查询)执行多查询,请执行以下操作:

//note: queries begin from 0, not from 1
string query0 = "SELECT uid2 FROM friend WHERE uid1 = me()";
string query1 = "SELECT uid1, uid2 FROM friend WHERE uid1 IN (SELECT uid2 FROM #query0) AND uid2 IN (SELECT uid2 FROM #query0)";

dynamic result = fb.Query(query0, query1);

要回答这个问题,我从这里得到了启发(必须弄清楚查询从0开始):How to use fql.multiquery with C# SDK

享受!