开发者

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜