2014-10-29 151 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"]));