1

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バージョンで追加できますか?

4

2 に答える 2

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);
于 2011-05-13T05:29:42.457 に答える
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から始まることを理解する必要がありました):C#SDKでfql.multiqueryを使用する方法

楽しみ!

于 2011-05-02T06:34:59.157 に答える