How to convert data using lambda expression or using any other logic?
I have a DataTable which contains data in this format. I want to convert it to another format. What is the simplest way to achieve this? maybe using lambda expression. I am using 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
example 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 007开发者_如何学编程82 003850 005723 10 40 70
This will generate the input that matches what you asked for.
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();
[Edit]
For "all scenarios":
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));
Output:
1 00782 003850 005723 10 40 70
2 00782 003850 005723 20 50 80
3 00782 003850 005723 30 60 90
精彩评论