c# - 使用 lambda 聚合匿名类型

标签 c# linq lambda

我正在尝试以 {type}:{number} 格式打印电话号码列表(\n 代表每个号码)。因此,我将从 2 个数字的列表中打印出:

 Home: 111-111-1111
 Cell: 222-222-2222

到目前为止,我可以选择一个匿名类型,但是当我进行聚合时,它会在屏幕上打印出整个匿名类型,如下所示:

 new { phoneType = Home + ": ", phoneNumber = 111-111-1111 }

我什至应该使用聚合吗? 这就是我正在使用的:

  PhoneNumbers.Select(x => new { phoneType = x.PhoneType, phoneNumber = x.PhoneNumber1 }).Aggregate(
                (p, x) => new { phoneType = p.phoneType + ": ", x.phoneNumber });

最佳答案

如果您只想将电话号码作为字符串,您可以在 Select 调用中创建该字符串:

var x = PhoneNumbers.Select(x => string.Format("{0}: {1}", x.PhoneType, x.PhoneNumber));

您的聚合调用基本上是一个错误(假设它甚至可以编译),因为您将“当前”电话号码与以前的电话类型组合在一起。由于现有的字符串方法,也没有必要将电话号码组合为文本:

var phoneNumberStrings = PhoneNumbers.Select(x => string.Format("{0}: {1}", x.PhoneType, x.PhoneNumber));
var text = string.Join(Environment.NewLine, phoneNumberStrings);

关于c# - 使用 lambda 聚合匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479787/

相关文章:

c# - 无法加载文件或程序集 HtmlAgilityPack 版本 1.4.6.0

c# - 将 SQL 2012 FORMAT 函数与 LINQ to Entity Framework 结合使用

c# - IEnumerable 在数组和列表上的表现不同

linq - 使用 lambda 选择类(class)中的最佳成绩

c# - 如何将查询操作仅应用于Azure表中的第一个实体?

c# - 嵌套开关?或其他检查不同条件的解决方案?

java - 使用 java 8 计算列表中对象的属性

python - 映射 numpy 数组中的值

c# - 如何在文本文件中添加标题

c# - 将来自不同来源的两个 LINQ 查询组合成单个对象