在对象列表中的所有名称之间添加逗号

2024-03-31

我试图做一些非常简单的事情,但由于某种原因,我无法有效地完成它并且看起来像我期望的那样好。

我有一个人员集合,我需要用逗号分隔具有相同电子邮件地址的人员的姓名。

我尝试使用Aggregate函数,但它为所有电子邮件返回一个字符串。我可以在 foreach 循环中完成它,但这似乎不是最好的方法。

有人可以建议我实现这个的好方法是什么吗?

这是数据:

var persons = new List<Person>
{
    new Person
    {
        Email = "[email protected] /cdn-cgi/l/email-protection",
        Name = "Mori"
    },
    new Person
    {
        Email = "[email protected] /cdn-cgi/l/email-protection",
        Name = "Tori"
    },
    new Person
    {
        Email = "[email protected] /cdn-cgi/l/email-protection",
        Name = "Jake"
    },
    new Person
    {
        Email = "[email protected] /cdn-cgi/l/email-protection",
        Name = "Jove"
    },
    new Person
    {
        Email = "[email protected] /cdn-cgi/l/email-protection",
        Name = "John"
    },
    new Person
    {
        Email = "[email protected] /cdn-cgi/l/email-protection",
        Name = "James"
    }
};

预期结果:

退货清单:

  1. 电子邮件(财产):[电子邮件受保护] /cdn-cgi/l/email-protection姓名(属性):Mori、Tori、Jake、Jove。
  2. 电子邮件(财产):[电子邮件受保护] /cdn-cgi/l/email-protection姓名(财产):约翰,詹姆斯。

以国王国王的答案为基础:

var groupedByEmails = persons.GroupBy (p => p.Email)
                             .Select (p => new Person {
                                Email = p.Key,
                                Name = String.Join(", ", p.Select (x => x.Name))
                             }).ToList();
groupedByEmails.Dump(); //only in LinqPad

尽管我不建议为此使用 Person 类。我宁愿为该投影创建一个单独的视图模型。这是因为 person 类描述了该上下文中的单个人。使用它来存储某种人员集合会导致以后出现问题。

Output:

在某些时候你会想知道是否Person现在存储一个名称或多个名称,您将引入某种 if 检查if(p.Name.indexOf(", ") != -1)去处理它,你就会不断积累债务。只需创建一个 EmailPersonCollectionVm.cs

public class EmailPersonCollectionVm 
{
    public string Email { get; set;}
    public List<string> Names {get; set;}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在对象列表中的所有名称之间添加逗号 的相关文章

随机推荐