如何解决以下场景?

时间:2012-09-18 05:13:38

标签: c# .net-2.0

我需要创建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,第二个文件中是下一个。基本上,文件1是文件2上更加深入查看的内容。最重要的是,第二个文件中的第4列是第一个文件的第4列中具有相同最后编号的所有值的总和。例如,在第二个文件中,第4列是350(因为第一个文件的值为100 + 50 + 200)。

我以为我可以获得与更详细的文件(文件1)对应的数据并在运行中构建文件2。这有更高效或更准确的方法吗?我想我必须保留一些运行总计,当我移动到下一个数字时我会知道何时重置运行总数(这部分我不清楚),例如,只要我在1,我继续添加,但是一旦我到达2,我将总数重置为0,等等。

1 个答案:

答案 0 :(得分: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使用给定的表达式将条目收集到组中(因此会有一个组中包含Col51的所有条目,一个包含所有2的组}等等,然后Select通过对MyType的值进行求和,为每个组选择Col4的新实例。

我不知道第二列和第三列中的值是什么,但如果它们也是从第一个数据集中的条目派生的,那么您应该能够找到合适的表达式代替{{1} }。