将对象列表中的字段合并为CSV

本文关键字:合并 CSV 字段 对象 列表 | 更新日期: 2023-09-27 18:28:42

LINQ新手问题。

当对象列表中的其他字段相同时,我希望将字段组合成逗号分隔的列表。不确定我是否答对了问题。

  class A
{
    int id;
    int roll;
    string name;
    public A(int id, int roll, string name)
    {
        this.id = id;
        this.roll = roll;
        this.name = name;
    }
}
class Program
{
   static void Main(string[] args)
    {
        List<A> aList = new List<A>();
        A a1 = new A(24, 501, "alex");
        A a2 = new A(12, 27, "steven");
        A a3 = new A(24, 67, "bob");
        A a4 = new A(1, 90, "erin");
        A a5 = new A(12, 27, "christy");
        aList.Add(a1);
        aList.Add(a2);
        aList.Add(a3);
        aList.Add(a4);
        aList.Add(a5);
    }

由于a2和a5的id和roll是相同的(12,27),在创建一个新的对象列表时,我希望将其中一个字段作为(12,27%,"steven,christy"),其余字段只是复制,因为没有任何匹配。

如果问题/解释有误,我很抱歉。

将对象列表中的字段合并为CSV

var res = aList
    .GroupBy(z => new { z.id, z.roll })
    .Select(z => new A(z.Key.id, z.Key.roll, string.Join(",", z.Select(z2 => z2.name))))
    .ToList();

请注意,idrollname必须是public