2

カンマ区切りのファイルを 2 つ作成する必要があります。1 つは次の形式になります。

A、23、10、100、1A、23、11、50、1A、23、12、200、1A

23、10、25、2A、
23、11、25、2A

23、12 、200、2

もう1つは次のようになります。

B, 23, 44, 350, 1
B, 23, 50, 250, 2

ストアド プロシージャを介して初期データを取得し、厳密に型指定されたデータセットを設定します。どうすればよいかわからない部分は、データを解析して適切なファイルを生成することです。いくつかのことが起こる必要があります。各ファイルの最後の番号は一致する必要があるため、上記の例では、1 は最初のファイルの最後の番号であり、1 は 2 番目のファイルの最初の行の最後の番号です。最初のファイルでは 2 が次で、2 番目のファイルでは 2 が次です。基本的に、ファイル 1 はファイル 2 をさらにドリルダウンしたものです。最も重要なことは、2 番目のファイルの 4 列目は、最初のファイルの 4 列目で同じ最後の番号を持つすべての値の合計です。例として、2 番目のファイルでは、4 番目の列は 350 です (最初のファイルの値は 100 + 50 + 200 であるため)。

より詳細なファイル (ファイル 1) に対応するデータを取得し、その場でファイル 2 を構築できると考えていました。これを行うためのより効率的または正確な方法はありますか? ある種の累計を維持する必要があり、次の数字に移動するときに累計をいつリセットするかを知っていると思います (この部分については明確ではありません)。たとえば、私が 1 である限り、加算し続けますが、2 になったら合計を 0 にリセットします。

4

1 に答える 1

0

私はあなたが現在これに沿って何かを持っていると仮定しています:

class MyType
{
    public string Col1 { get; set; }
    public int Col2 { get; set; }
    public int Col3 { get; set; }
    public int Col4 { get; set; }
    public int Col5 { get; set; }
}

IEnumerable<MyType> firstDataSet = GetStuffFromDB();

Col5最初のデータ セットから、エントリを でグループ化し、 の値を合計して、2 番目のデータ セットを作成しますCol4。これは、LINQ を使用して簡単に行うことができます。

var secondDataSet = firstDataSet.GroupBy(entry => entry.Col5).Select
(
    group => new MyType
    {
        Col1 = "B",
        Col2 = <whatever>,
        Col3 = <whatever>,
        Col4 = group.Sum(entry => entry.Col4),
        Col5 = group.Key
    }
);

GroupByは、指定された式を使用してエントリをグループに収集し (したがって、 がすべてのエントリを持つグループ、すべてがCol51持つグループ2などになります)、の値を合計することによって、グループごとSelectに の新しいインスタンスを選択します。MyTypeCol4

2 番目と 3 番目の列の値が何であるかはわかりませんが、それらも最初のデータ セットのエントリから派生している場合は、代わりに適切な式を考え出すことができるはずです<whatever>

于 2012-09-18T05:47:47.963 に答える