Запуск мультизапроса в клиенте выдает ошибку парсера - PullRequest
1 голос
/ 28 февраля 2011

У меня следующая проблема в c # SDK: при попытке запустить мультизапрос в настольном приложении со следующей строкой (поиск пар идентификаторов общих друзей) я получаю ошибку синтаксического анализатора:

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.

Эта же строка (без escape-последовательностей перед кавычками) работает, если я вставлю ее в http://developers.facebook.com/docs/reference/rest/fql.multiquery/ но не в http://developers.facebook.com/docs/reference/rest/fql.query/ поэтому проблема в том, что мне нужно запустить его как несколько запросов, а не как запрос - теперь я хотел бы спросить:

Можно ли каким-либо образом обрабатывать несколько запросов с помощью функции Facebook.FacebookClient.Query SDK или мне нужно написать функцию, которая бы это делала? Как я понимаю, единственное, что мне нужно изменить, - это адрес, к которому он подключается. Если да, можно ли добавить его в следующую версию SDK?

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Вот альтернатива ответу 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 голос
/ 02 мая 2011

Чтобы сделать мультизапрос со ссылкой на первый запрос, такой как запрос, выполните следующее:

//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): Как использовать fql.multiquery с C # SDK

Наслаждайтесь!

...