0

以下のようなデータテーブルがあります。リストしたように行をグループ化する簡単な方法を作成するのに苦労しています。1 つの ID のすべての年の合計、1 年のすべての ID の合計など、さまざまな計算を実行できる必要があります。また、1 つの ID のすべての年と値を一連のテキスト ボックス、変数に体系的に割り当てる必要があります。そうしないと、何らかの方法でそれらに論理的にアクセスできます。私が抱えている最大の問題は、データテーブルを変換する方法と、必要なことを処理するための最良の方法を決定することだと思います。

現時点の

ID      Year        Value

1       2010        25
1       2010        25  
1       2009        30
1       2008        5   
1       2008        5       
1       2008        5       
2       2010        1
2       2010        4
2       2009        0
2       2008        25  
2       2008        25      
2       2008        25

私が欲しいもの

ID      Year        Value

1       2010        50
        2009        30  
        2008        15

2       2010        5
        2009        0
        2008        75

私はまだ回答を送信できませんが、これは私が望んでいたことです。ご協力いただきありがとうございます。

    var Groups =
            from DataRow row in dataset1.datatable1.Rows
            group row by row["id"] into newGroup1
            from newGroup2 in
                (from row in newGroup1
                 group row by row["year"]).Distinct()
            group newGroup2 by newGroup1.Key;

        foreach (var outerGroup in Groups)
        {
           Console.WriteLine("Level = {0}", outerGroup.Key);
            foreach (var innerGroup in outerGroup)
            {
                Console.WriteLine("Data = {0}", innerGroup.Key);
                foreach (var innerGroupElement in innerGroup)
                {
                    Console.WriteLine("\t\t{0}", innerGroupElement["Value"]);
                }
            }
        }

これは私に次のようなものを与えます:

ID:1
    Year:2008
        Value:15
    Year:2009
        Value:30
    Year:2010
        Value:50
ID:2
    Year:2008
        Value:75
    Year:2009
        Value:0
    Year:2010
        Value:5
4

1 に答える 1

2

あなたは使用することができLinq-To-DataSetますEnumerable.GroupBy

var yearGroups = tbl.AsEnumerable()
    .GroupBy(r => new
    {
        ID = r.Field<int>("ID"),
        Year = r.Field<int>("Year")
    });

foreach (var yg in yearGroups)
{
    Console.WriteLine("ID:{0} Year:{1} Sum:{2}"
        , yg.Key.ID
        , yg.Key.Year
        , yg.Sum(r => r.Field<int>("Value")));
}

出力:

ID:1 Year:2010 Sum:50
ID:1 Year:2009 Sum:30
ID:1 Year:2008 Sum:15
ID:2 Year:2010 Sum:5
ID:2 Year:2009 Sum:0
ID:2 Year:2008 Sum:75
于 2012-07-25T15:09:47.110 に答える