2011-05-13 73 views
2

编码平台:ASP.NET C#4.0C# - 转换的动态成Lambda表达式

我有下面的代码片段

public string PageID { get { return "20954654402"; } } 
dynamic accounts = fb.Get("me/accounts"); 
if (accounts != null) 
{ 
    bool isFound = false; 
    foreach (dynamic account in accounts.data) 
    { 
     if (account.id == PageID) 
     { 
      isFound = true; 
      break; 
     } 
    } 
    if (!isFound) 
    { 
     // user not admin 
    } 
    else 
    { 

    } 
} 

两个问题

  1. 为什么 (account.id == PageID)错误(pageid是一个字符串属性) 更新:这是一个愚蠢的无关的错误,因为我在PageMethods中调用所有这些。
  2. 是否有改变foreach循环更简单,更C#4.0样的方式?

更新:

其从Facebook的API调用的响应。样品将是

{ 
    [{ 
     "name": "Codoons", 
     "category": "Computers/technology", 
     "id": "20954694402", 
     "access_token": "179946368724329|-100002186424305|209546559074402|Hp6Ee-wFX9TEQ6AoEtng0D0my70" 
    }, { 
     "name": "Codtions Demo Application", 
     "category": "Application", 
     "id": "1799464329", 
     "access_token": "179946368724329|-100002186424305|179946368724329|5KoXNOd7K9Ygdw7AMMEjE28_fAQ" 
    }, { 
     "name": "Naen's Demo Application", 
     "category": "Application", 
     "id": "192419846", 
     "access_token": "179946368724329|61951d4bd5d346c6cefdd4c0.1-100002186424305|192328104139846|oS-ip8gd_1iEL9YR8khgrndIqQk" 
    }] 
} 

更新的代码也有点。

的目的是获得与PageID匹配account.id并取得与该account.id

相关的access_token感谢您的时间。

+0

'account.id == PageID'导致什么错误? – 2011-05-13 13:09:51

+0

1.尝试PageID.toString() 2.每个看似正常,看不出把它写短 – Matthias 2011-05-13 13:10:41

+0

什么类型的对象返回“fb.Get”直接的方式? – 2011-05-13 13:10:59

回答

1

可以使用LINQ方法的替代的foreach:

if(accounts.Any(a => a.id == PageID)) 
{ 
    // user not admin 
} 
else 
{ 

} 

至于为什么它的“错误”:我们不能说,因为我们不知道id是什么类型的。但是,如果idint类型,则会解释错误。

+0

抱歉,延迟响应。其他地方很忙。丹尼尔你的解决方案不会工作。我们正在谈论动态类型 – naveen 2011-05-13 15:38:32

0

如果帐户收集可以修改(插入,删除)在另一个线程的foreach当发生这种情况(简单的for循环不会)将抛出一个异常。

0

当使用==用字符串即pageid是一个字符串,那么account.id也应该是一个字符串,而不是一个整数或浮点数,也许这就是什么导致了错误

0
accounts.data.Any(a => a.id.ToString() == PageID) 
0

您应该使用一个动态谓词。这样的事情:

 

var pagesWithId = (Predicate)((dynamic x) => x.id == PageId); 
var pagesFound = accounts.FindAll(pagesWithId); 

if(pagesFounds.Count() > 0) 
//do your thing 
 
+0

没有。它不工作。我喜欢它。 – naveen 2011-05-13 14:30:47

+0

问题是什么? – tucaz 2011-05-17 18:16:51