将linq查询结果连接到字符串
本文关键字:字符串 连接 结果 linq 查询 | 更新日期: 2023-09-27 18:15:37
我有这样一个简单的类:
class A
{
public string Name { get; set; }
public int Age { get; set; }
}
我有一本字典:
Dictionary<string,A> dic = new Dictionary<string,A>();
dic["a"]=new A(){ Age=2, Name="aa"};
dic["b"]=new A(){ Age=3, Name="baa"};
dic["c"]=new A(){ Age=4, Name="caa"};
在这里我可以看到所有的项目:
Console.WriteLine (dic.Select(f=>f.Key+" =>"+f.Value.Age+" "+f.Value.Name));
输出:
a =>2 aa
b =>3 baa
c =>4 caa
但是我希望它是一个字符串!
类似这样的字符串值:
@"a =>2 aa 'n
b =>3 baa 'n
c =>4 caa ";
我可以用ToArray和string来做。Join:
var t=dic.Select(f=>f.Key+" =>"+f.Value.Age+" "+f.Value.Name);
Console.WriteLine (String.Join("'n",t.ToArray() ));
但我肯定有更好的(更短、更优雅的)方法使用这个语句:(加上一点附加)
dic.Select(f=>f.Key+" =>"+f.Value.Age+" "+f.Value.Name)
有什么帮助吗
可以使用聚合扩展方法
string s = dic.Aggregate(String.Empty,
(current, f) =>
String.Format("{0}'n{1} => {2} {3}",
current,
f.Key,
f.Value.Age,
f.Value.Name))
.TrimStart();
或者使用StringBuilder
string s = dic.Aggregate(new StringBuilder(),
(current, f) =>
current.AppendLine(
String.Format("{0} => {1} {2}",
f.Key,
f.Value.Age,
f.Value.Name))
.ToString();
你的解决方案很好,我唯一要摆脱的是对ToArray
的调用,所以
Console.WriteLine (String.Join("'n",t ));
或
Console.WriteLine (String.Join(Environment.NewLine, t));