我有一个DataTable,其中包含此格式的数据。我想将其转换为另一种格式。 实现这一目标的最简单方法是什么?也许使用lambda表达式。我在用 C#4.0
dattable1:
seq id Amt
=============================
1 00782 10
2 00782 20
3 00782 30
1 003850 40
2 003850 50
3 003850 60
1 005723 70
2 005723 80
3 005723 90
To be stored in another datatable or list in this format
1 00782 003850 005723 10 40 70
2 00782 003850 005723 20 50 80
3 00782 003850 005723 30 60 90
示例2
dattable1:
seq id Amt
=============================
1 00782 10
1 003850 40
1 005723 70
To be stored in another datatable or list in this format
1 00782 003850 005723 10 40 70
答案 0 :(得分:4)
这将生成与您要求的匹配的输入。
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