RuntimeBinderException на динамическом Linq с Facebook C # SDK - PullRequest
0 голосов
/ 06 декабря 2010

Я использую Facebook C # SDK в приложении Canvas.

При запуске этого кода ...

public IEnumerable<string> GetFansIds(string pageId, IEnumerable<string> userIds)
{
    if (userIds.Count() == 0)
        return new List<string>();

    var fb = new FacebookApp();
    string query = String.Format("select uid from page_fan where uid IN ( {0} ) and page_id = {1}",
        String.Join(",", userIds),
        pageId
    );
    dynamic result = fb.Fql(query);
    return result.Select((Func<dynamic, string>)(x => x.uid)).ToList();
}

Я получаю следующее исключение:

RuntimeBinderException: Cannot perform runtime binding on a null reference

Код выполняет следующие действия:

  • Он выполняет FQL-запрос, чтобы получить JsonArray, содержащий JsonObject каждый со свойством uid (содержащим идентификаторы пользователей, которые не являютсяфанат какой-то фан-страницы.

  • Select просто преобразует все динамические объекты в List<string>

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

Как я могу исправить динамическую лямбду ??? (Пожалуйста, не говорите мне простоиспользуйте foreach, что я сейчас и делаю сейчас)

1 Ответ

1 голос
/ 20 декабря 2010

Проблема в том, что методы расширения не могут использоваться на динамических объектах.Приведите результат запроса к JsonArray, а затем вы можете использовать выражения linq для JsonArray.

var result = (JsonArray)fb.Fql(query);
return result.Select((Func<dynamic, string>)(x => x.uid)).ToList();
...