.NET C# Linq从对象列表的两个属性的连接中获取字符串列表

0ejtzxu1  于 2023-05-04  发布在  .NET
关注(0)|答案(3)|浏览(199)

我有一个Employee对象列表,其中每个雇员都有一个Name属性和一个Address属性。我可以使用什么Linq来获得一个字符串列表,其中每个字符串都是由Employee.Name+“_”+Employee.Address串联而成的?

public class Employee {
    public int Id { get; set; }
    public int Name { get; set; }
    public int Address { get; set; }
}

List<Employee> emplist = new List<Employee>();
emplist.Add(new Employee() {
    Id=1,
    Name = "John Doe",
    Address = "Some Street 5"
});
emplist.Add(new Employee() {
    Id = 2,
    Name = "Jack Daniels",
    Address = "Main Avenue 43"
});
emplist.Add(new Employee() {
    Id = 3,
    Name = "Jane Murphy",
    Address = "BlahBlah 123"
});

我想得到一个字符串列表,如“John Doe_Some Street 5”,“Jack Daniels_Main Avenue 43”,“Jane Murphy_BlahBlah 123”等

k10s72fa

k10s72fa1#

employees.Select(emp => string.Concat(emp.Name, "_", emp.Address))

这将返回一个IEnumerable,其中包含每个雇员的串联字符串。
确保在文件的顶部有using System.Linq;

nwwlzxa7

nwwlzxa72#

有了这个is代码,你可以创建一个新的字段,叫做address

emplist.Select(c => new { Name_address = string.Format("{0}_{1}", c.Name, c.Address) });
c9x0cxw0

c9x0cxw03#

基于其中的一些评论和建议,为了完整起见,我在这里添加了一些示例代码来解决相同的问题。
如果你使用String插值,你可以这样做:

var employeesNamesAndAddressesFormatted = emplist.Select(e => $"{e.Name}_{e.Address}");
foreach (var emp in employeesNamesAndAddressesFormatted){
        Console.WriteLine(emp);
}

这给出:

John Doe_Some Street 5
Jack Daniels_Main Avenue 43
Jane Murphy_BlahBlah 123

要使用StringBuilder来累积字符串,您可以这样做:

var sb = new StringBuilder();
emplist.Select(e => sb.AppendLine($"{e.Name}_{e.Address}")).ToList();
Console.WriteLine(sb.ToString());

字符串是不可变的,但是使用StringBuilder允许您使用相同的字符串构建器示例添加字符串。如果这是一个非常大的数组,这将是一个更有趣的解决方案,节省一些内存。

相关问题