public static void Main()
new Input() {Name= "Foo", Customer= "Alex", Number= "33.2", Amt= 100.50, FileId= 12345611, FileNumber= "0987-123"},
new Input {Name= "Bar", Customer= "Josh", Number= "1", Amt= 100.50, FileId= 456546456, FileNumber= "0987-123"},
new Input {Name= "Foo", Customer= "Alex", Number= "33.2", Amt= 110.00, FileId= 12345611, FileNumber= "0987-123"},
new Input {Name= "Foo", Customer= "Frank", Number= "9.8", Amt= 100.50, FileId= 324234, FileNumber= "9999-123"},
new Input {Name= "Test2", Customer= "Bob" , Number= "1.9", Amt= 100.50, FileId= 782724, FileNumber= "0987-123"},
new Input {Name= "Foo", Customer= "Alex" , Number= "33.2", Amt= 50.80, FileId= 9872561, FileNumber= "8181-1273"}
var result = inputs.GroupBy(x => x.Name)
Rows = g.GroupBy(x => new {x.Customer, x.Number})
Customer = g2.Key.Customer,
Details = g2.GroupBy(x => new {x.FileId,x.FileNumber})
.Select(g3 => new {Amt = g3.Sum(x => x.Amt), g2.Key.Number, g3.Key.FileId, g3.Key.FileNumber})
foreach(var item in result)
Console.WriteLine(item.Name);
foreach(var row in item.Rows)
Console.WriteLine($"\tNumber: {row.Number} Cusomer: {row.Customer}");
foreach(var detail in row.Details)
Console.WriteLine($"\t\tAmt: {detail.Amt} Number: {detail.Number} FileId: {detail.FileId} FileNumber: {detail.FileNumber}");
public string Name{get;set;}
public string Customer{get;set;}
public string Number{get;set;}
public double Amt{get;set;}
public int FileId{get;set;}
public string FileNumber{get;set;}