Это сгенерирует ввод, который соответствует тому, что вы просили.
var datatable1 = new[]
{
new { seq = 1, id = "00782", Amt = 10 },
new { seq = 2, id = "00782", Amt = 20 },
new { seq = 3, id = "00782", Amt = 30 },
new { seq = 1, id = "003850", Amt = 40 },
new { seq = 2, id = "003850", Amt = 50 },
new { seq = 3, id = "003850", Amt = 60 },
new { seq = 1, id = "005723", Amt = 70 },
new { seq = 2, id = "005723", Amt = 80 },
new { seq = 3, id = "005723", Amt = 90 }
};
var result = datatable1
.GroupBy(arg => arg.seq)
.Select(arg =>
new
{
arg.Key,
id1 = "00782",
id2 = "003850",
id3 = "005723",
Amt1 = arg.Where(x => x.id == "00782").Sum(x => x.Amt),
Amt2 = arg.Where(x => x.id == "003850").Sum(x => x.Amt),
Amt3 = arg.Where(x => x.id == "005723").Sum(x => x.Amt),
})
.ToList();
[Редактировать]
Для "всех сценариев":
var result = datatable1
.GroupBy(arg => arg.seq)
.Select(arg =>
new
{
arg.Key,
Ids = arg.Select(x => x.id).ToList(),
Amounts = arg.Select(x => x.Amt).ToList(),
})
.ToList();
foreach (var row in result)
Console.WriteLine("{0}\t{1}\t{2}", row.Key, string.Join("\t", row.Ids), string.Join("\t", row.Amounts));
Выход:
1 00782 003850 005723 10 40 70
2 00782 003850 005723 20 50 80
3 00782 003850 005723 30 60 90