使用Facebook C#SDK在动态Linq上运行RunBinderException

时间:2010-12-06 00:14:44

标签: dynamic c#-4.0 facebook-c#-sdk

我在画布应用中使用Facebook C#SDK。

运行此代码时......

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属性(包含不属于某个粉丝专页的用户的uid。

    < / LI>
  • “选择”只会将所有动态对象转换为List<string>

FQL部分正常工作,因为我可以在调试器中看到结果。 问题在于Select,我无法使其发挥作用。

如何修复动态lambda ??? (请不要只是告诉我使用foreach,这是我目前正在做的事情)

1 个答案:

答案 0 :(得分:1)

问题是扩展方法不能用于动态对象。将查询结果转换为JsonArray,然后可以在JsonArray上使用linq表达式。

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