2

我需要创建 2 个逗号分隔的文件。一个将采用以下格式:

A, 23, 10, 100, 1
A, 23, 11, 50, 1
A, 23, 12, 200, 1
A, 23, 10, 25, 2
A, 23, 11, 25, 2
A, 23, 12 , 200, 2

另一个是:

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

我将通过存储过程检索初始数据并填充强类型数据集。我不知道该怎么做的部分是解析数据并生成正确的文件。有几件事需要发生。每个文件中的最后一个数字必须匹配,因此在上面的示例中,1 是第一个文件中的最后一个数字,1 是第二个文件中第一行的最后一个数字。在第一个文件中,2 是下一个,2 是第二个文件中的下一个。基本上,文件 1 是对文件 2 的深入了解。最重要的是,第二个文件中的第 4 列是第一个文件的第 4 列中具有相同最后一个数字的所有值的总和。例如,在第二个文件中,第 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的值求和来构造第二个数据集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使用给定的表达式将条目收集到组中(因此将有一个包含所有条目 where Col5is1的组,一个包含所有2's 的组,等等),然后通过对 的值求和来为每个组Select选择一个新的实例。MyTypeCol4

我不知道第二列和第三列中的值是什么,但如果它们也来自第一个数据集中的条目,您应该能够提出合适的表达式来代替<whatever>.

于 2012-09-18T05:47:47.963 回答