我需要创建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,等等。
答案 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
使用给定的表达式将条目收集到组中(因此会有一个组中包含Col5
为1
的所有条目,一个包含所有2
的组}等等,然后Select
通过对MyType
的值进行求和,为每个组选择Col4
的新实例。
我不知道第二列和第三列中的值是什么,但如果它们也是从第一个数据集中的条目派生的,那么您应该能够找到合适的表达式代替{{1} }。