2014-10-29 165 views
1

我有一個JArray,看起來像這樣:在JArray加入琴絃與LINQ

enter image description here

我使用下面的代碼,以獲得預期的結果:6035940:8061090,6035940:8084337

我可以用Linq清理嗎?怎麼樣?

public static string GiveClientCampaignParam(JArray myArray) 
{ 
    StringBuilder sb = new StringBuilder(); 

    foreach (var arrayItem in myArray) 
    { 
     string clientId = arrayItem["ClientId"].ToString(); 
     string campaignId = arrayItem["CampaignId"].ToString(); 

     sb.Append(clientId + ":" + campaignId + ","); 
    } 
    sb.Remove(sb.Length - 1, 1); 

    return sb.ToString(); 
} 
+2

爲什麼要刪除最後的*兩個*字符而不是最後一個字符?注意你的輸出如何以808433而不是8084337結束... – 2014-10-29 17:44:20

+0

@Jon Skeet你是對的。它應該是最後一個chara,而不是最後兩個chara。 – Kyle 2014-10-29 17:50:07

回答

3

使用string.JoinSelect到JArray元素投射到一個字符串:

public static string GiveClientCampaignParam(JArray myArray) 
{ 
    return string.Join(",", myArray.Select(j => 
     string.Format("{0}:{1}", j["ClientId"], j["CampaignId"]); 
} 

使用string.Join也意味着你不需要從最終減去額外的逗號。

+1

沒有必要在那裏調用'ToString()',它將由'string.Format'自動完成。 – 2014-10-29 17:50:40

5

這應該有效。

return string.Join(",", myArray.Select(a => a["ClientId"] + ":" + a["CampaignId"]));