连接IEnumerable <keyvaluepair <string,string>&gt;使用Linq </keyvaluepair <string,string>将值转换为字符串

时间:2012-10-19 20:28:49

标签: c# linq concatenation

鉴于IEnumerable<KeyValuePair<string,string>>,我正在尝试使用linq将值连接成一个字符串。

我的尝试:

string path = attributes.Aggregate((current, next) => "@" + current.Key + "=" + current.Value + " and @" + next.Key + "=" + next.Value);

这会产生错误:

  

无法将表达式类型“string”转换为返回类型“KeyValuePair<string,string>

在linq中有更有效的方法吗?

完整的方法......

public IEnumerable<XmlNode> GetNodes(IEnumerable<KeyValuePair<string,string>> attributes) {
    StateInfoXmlDocument stateInfoXmlDocument = new StateInfoXmlDocument();
    string path = attributes.Aggregate((current, next) => "@" + current.Key + "=" + current.Value + " and @" + next.Key + "=" + next.Value);
    string schoolTypeXmlPath = string.Format(SCHOOL_TYPE_XML_PATH, path);

    return stateInfoXmlDocument.SelectNodes(schoolTypeXmlPath).Cast<XmlNode>().Distinct();
}

4 个答案:

答案 0 :(得分:15)

这是你正在寻找的吗?

var strings = attributes.Select(kvp => string.Format("@{0}={1}", kvp.Key, kvp.Value));
string path = string.Join(" and ", strings);

答案 1 :(得分:4)

string s = String.Join("@",attributes.Select(kv=>kv.Key+"="+kv.Value));

答案 2 :(得分:0)

如果要使用aggregate来创建字符串,则需要使用聚合的种子重载 如果您使用无种子版本,则呼叫中的所有类型都必须相同。

答案 3 :(得分:0)

string templ = "{0}={1}";
string _authStr = String.Join("&", formParams.Select(kv => String.Format(templ, kv.Key, kv.Value));