我有一本字典,我要将其转换为查询字符串。
var encryptionItems = new Dictionary<string,string>();
encryptionItems.Add("customerid", row.CustomerId.ToString());
encryptionItems.Add("firstname",model.FirstName);
encryptionItems.Add("lastname",model.LastName);
var get = encryptionDal.EncryptDataWithSalt(encryptionItems, salt);
var linkUri = string.Empty;
foreach (var item in get)
{
linkUri = string.Concat(linkUri, item.Key, "=", HttpUtility.UrlEncode(item.Value), "&");
}
我想用LINQ格式编写foreach循环来优化代码。 不知道该怎么做。谁能建议我什么?
答案 0 :(得分:4)
您不需要显式循环。 2016-02-19 06:33p.m.
是为了做到这一点。
String.Join()
另一方面,您可能不希望使用LINQ的开销。如果您要使用循环,请在要添加可能未知数量的字符串时使用var encrypted = encryptionDal.EncryptDataWithSalt(encryptionItems, salt); // assuming it returns a Dictionary<string, string>
var queryString = String.Join("&",
from kvp in encrypted
select $"{WebUtility.UrlEncode(kvp.Key)}={WebUtility.UrlEncode(kvp.Value)}"
);
。
StringBuilder
答案 1 :(得分:2)
说实话,我会保持原样。 LINQ实际上不会再具有高性能,在某些情况下我发现语法模糊了代码的意图,使其难以维护。
尽管如此,我能提供的最短答案是:
var encryptionItems = new Dictionary<string, string>
{
{"customerid", row.CustomerId.ToString()},
{"firstname", model.FirstName},
{"lastname", model.LastName}
};
var get = encryptionDal.EncryptDataWithSalt(encryptionItems, salt);
var linkUri = get.Aggregate(string.Empty, (current, item) => string.Concat(current, item.Key, "=", HttpUtility.UrlEncode(item.Value), "&"));
答案 2 :(得分:0)
var linkUri = get.Aggregate(string.Empty,
(current, item) => string.Concat(current, item.Key, "=", HttpUtility.UrlEncode(item.Value), "&"));