鉴于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();
}
答案 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));