我有一个通用的 C# 列表 List<Result>
,其中包含多个字段和多行数据,其类型为 RESULT
,具体如下:
public class Result
{
public int TrdID;
public string Term;
public double Price;
public string Seller;
public string Buyer;
public bigint Quantity;
}
数据如下:
TrdID Term Price Seller Buyer Quantity
1000 201508 1 ABC XYZ 10
1010 201508 2 ACB PQR 10
1002 201507 1.5 ABX PEW 20
1002 201506 1.5 ABX PEW 20
1002 201508 1.5 ABX PEW 20
现在,我想处理上述数据并返回一个单一的唯一
ID
提供的结果。对于特定的ID
,所有列都相同,除了Term
。例如,我有三条记录ID 1002
,我想将它们合并为一条记录,将Term转换为DateTime,并引入两个新列startDate
和EndDate
,期望的结果如下所示。 TrdID StartDate EndDate Price Seller Buyer Quantity
1000 08/01/2015 08/31/2015 1 ABC XYZ 10
1010 08/01/2015 08/31/2015 2 ACB PQR 10
1002 06/01/2015 08/31/2015 1.5 ABX PEW 60
从上面的数据可以看出,我有两列新列名为
StartDate
和EndDate
,而不是用于获取StartDate
和EndDate
值的Term
列。
此外,最后一行的Quantity
发生了变化,它是一个特定ID的所有数量的总和,即,ID重复的次数*Quantity
这里有两种情况要解决
情况一:
如果特定ID
(例如1000
)只有一条记录,则StartDate
将是该月的第一天,EndDate
将是该月的最后一天,即08/01/2015和08/31/2015
。
对Quantity
没有更改
情况二:
如果特定ID
(例如1002
)有多个记录(所有期限都在一个序列中),则StartDate
将是最小月份的第一天,即06/01/2015
,EndDate
将是期限列中最高月份的最后一天,即08/31/2015
。
Quantity= ID重复的次数*Quantity
, 即 20*3=60
我的结果列表类型为public class ProcessedResult
{
public int TrdID;
public DateTime StartDate;
public DateTime EndDate;
public double Price;
public string Seller;
public string Buyer;
public bigint Quantity;
}
请问有什么好的方法来解决这个问题吗?
GroupBy
,Min
和Max
似乎是合理的函数使用。 - D Stanley