(100) параметр запросов: ожидается массив.- Facebook SDK C # - PullRequest
4 голосов
/ 31 августа 2011
            string query1 = String.Format("\"query1\":\"SELECT pid, object_id, src_big, owner FROM photo where object_id={0}\"", photoFbId);
            string query2 = String.Format("\"query2\":\"SELECT first_name, last_name FROM user where uid in (select owner from #query1)\""); 

            var client = new FacebookClient(accessToken);
            dynamic imageArray = client.Query(query1,query2);

дает (100) параметров запроса: ожидаемый массив. в строке dynamic imageArray = client.Query (query1, query2); Что я сделал не так? Метод Query принимает строку параметров, поэтому все должно быть в порядке ..

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Если вы передадите более одного параметра методу Query, он будет автоматически использовать мультизапрос вместо одного запроса.

SDK Facebook C # автоматически добавляет query1 и query2.Вам нужно только ввести запрос.

var fb = new FacebookClient("access_token");
dynamic result = fb.Query(
    string.Format("SELECT pid, object_id, src_big, owner FROM photo where object_id={0}", photoFbId),
    "SELECT first_name, last_name FROM user where uid in (select owner from #query1)");

Вы можете получить доступ к значениям fql с помощью.

var result0 = result[0].fql_result_set;
var result1 = result[1].fql_result_set;

Вы можете узнать больше о том, как делать запросы, используя Facebook C #SDK на http://blog.prabir.me/post/Facebook-CSharp-SDK-Making-Requests.aspx

0 голосов
/ 31 августа 2011

Я скачал источник .Предполагая, что вы используете это, нет перегрузки, которая принимает две строки.

    public virtual object Query(string fql)
    {
        Contract.Requires(!String.IsNullOrEmpty(fql));

        var parameters = new Dictionary<string, object>();
        parameters["query"] = fql;
        parameters["method"] = "fql.query";

        return Get(parameters);
    }

    public virtual object Query(params string[] fql)
    {
        Contract.Requires(fql != null);

        var queryDict = new Dictionary<string, object>();

        for (int i = 0; i < fql.Length; i++)
        {
            queryDict.Add(string.Concat("query", i), fql[i]);
        }

        var parameters = new Dictionary<string, object>();
        parameters["queries"] = queryDict;
        parameters["method"] = "fql.multiquery";

        return Get(parameters);
    }
...