【发布时间】:2013-07-23 17:05:14
【问题描述】:
我有一个包含复杂数据的列表
public class CAR
{
public int ID {get ; set ; }
public string Name { get ; set ; }
public string EngineType { get ; set ; }
public List<string> Months { get; set; }
}
请注意,Months 数据为 List<string>,其最大计数为 150
List<CAR> A = new List<CAR>();
List<CAR> B = new List<CAR>();
A 有以下数据
ID | Name | EngineType | Months[0] | Months[1] | Months[2] | Months[3] .. | Months[149] |
1 | Zen | 1001 | 1 | 1 | 4 | 5 .. | 6 |
2 | Benz | 2002 | 6 | 4 | 5 | 6 .. | 2 |
3 | Zen | 1001 | 3 | 1 | 7 | 5 .. | 0 |
4 | Zen | 1001 | 2 | 2 | 4 | 5 .. | 6 |
5 | Zen | 2002 | 2 | 2 | 4 | 5 .. | 6 |
6 | Benz | 2002 | 1 | 1 | 1 | 1 .. | 1 |
如果 EngineType 和 Name 相同,我们添加这些行并将结果存储在单行中
例如:添加行
row 1 in B = 1 + 3 + 4
row 2 in B = 2 + 6
row 3 in B = 5
B 应包含以下操作
ID | Name | EngineType | Months[0] | Months[1] | Months[2] | Months[3] ... | Months[149] |
- | Zen | Petrol | 6 | 4 | 15 | 15 .. | 12 |
- | Benz | Diesel | 7 | 5 | 6 | 7 | 3 |
- | Zen | Diesel | 2 | 2 | 4 | 5 .. | 6 |
如果月份数据是整数类型的单独实体,我本来可以这样做
B = from val in A
group val by new val.EngineType into g
select new CAR{
EngineType = g.Key,
Name = g.Name,
Month0 = g.Sum(p => p.Month0),
Month1 = g.Sum(p => p.Month1),
Month2 = g.Sum(p => p.Month2),
.
.
.
.
.
.
Month148 = g.Sum(p => p.Month148),
Month149 = g.Sum(p => p.Month149)
}.ToList<CAR>();
但由于它的类型为List<string>,有没有办法完成这项工作?
非常感谢!
【问题讨论】:
-
您必须将
Parse字符串转换为数字,执行计算,然后将ToString()结果转换为目标字符串。 -
另一方面,您的最后一个代码示例似乎是错误的。它应该是
Month[0],您可能应该使用循环而不是单独分配每个月。 -
我不会想出如此丑陋且不可维护的代码和方法,而是将其分解为可重用的方法/组件。你在做的事情一开始就感觉不对。那么如果你有内存中的数据,将它们分解成更小的方法无论如何都不会影响性能。