将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)

有什么帮助吗

将linq查询结果连接到字符串

可以使用聚合扩展方法

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));