Вы можете прочитать все строки, а затем использовать Linq:
var data = File.ReadAllLines(@"c:\temp\sample.txt");
var names = data.Select(d => d.Split('\t'))
.Select(s => new { Name = s[0], SubName = s[1] })
.GroupBy(o => o.Name)
.Select(g => new Name()
{
Name1 = g.Key,
AssociatedSub = g.Select(v => new SubName() { Name = v.SubName }).ToList()
});
//This part is just to show the output
foreach (var name in names)
{
Console.WriteLine($"Name: {name.Name1}, AssociatedSub: {string.Join(",", name.AssociatedSub.Select(s => s.Name).ToArray())}");
}
Выход:
Имя: A, AssociatedSub: A
Имя: B, AssociatedSub: B
Имя: C, AssociatedSub: A, B, C
Имя: D, AssociatedSub: A, B
Мне пришлось изменить имя свойства на Name1
, так как это недопустимая языковая конструкция.
Сначала вы выбираете результат разделения, затем создаете анонимный тип со свойствами Name
и SubName
, которые будут использоваться для группировки. Наконец, вы выбираете из сгруппированных результатов и создаете экземпляры.
Это просто быстрый пример, поэтому будьте осторожны с ошибками, такими как Split
не возвращает ожидаемое количество деталей.