如题,比如一个对象是
List<Test> listTest = new List<Test>() {
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="AFR",zhi="13"},
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="AFR",zhi="47"},
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="WSR",zhi="20"},
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="WSR",zhi="57"},
new Test{ Ming="A", Xingbie="N",Xuehao="BL2",Code="AFR",zhi="13"},
new Test{ Ming="O", Xingbie="Y",Xuehao="BL2",Code="AFR",zhi="13"},
};
我想先根据前面3个字段分组,这样得到的list有3个小项。
然后再在3个小项中根据第4个字段Code来分组,并看code是不是AFR,如果是AFR。那么zhi就要在前面加个-,然后求出zhi的和,最终想得到的是
Ming="A", Xingbie="N",Xuehao="BL1",Code="AFR",zhi="-60",
Ming="A", Xingbie="N",Xuehao="BL1",Code="WSR",zhi="77",
Ming="A", Xingbie="N",Xuehao="BL2",Code="AFR",zhi="-13",
Ming="O", Xingbie="Y",Xuehao="BL2",Code="AFR",zhi="13",
我这样写会有问题
var newList = listTest .GroupBy(x => new { x.Ming, x.Xingbie, x.Xuehao }).ToList().SelectMany(x => x.GroupBy(y => y.Code)).Select(x =>
{
var temp = x.First();
decimal per = 0.00M;
temp.zhi = x.Sum(z => decimal.TryParse(z.zhi, out per) ? per : 0.00M).ToString("#,###.00");//这边怎么对Code是"AFR"的加负号,并求和呢?
return temp;
});
谢谢了!!
------解决方案--------------------
temp.zhi = x.Sum(z => decimal.TryParse(z.zhi, out per) ? per : 0.00M).ToString("#,###.00");//这边怎么对Code是"AFR"的加负号,并求和呢?
==>
temp.zhi = x.Select(z => int.TryParse((x.Key == "AFR" ? "-" : null) + z.zhi, out per) ? per : 0.00M).Sum().ToString("#,###.00");
------解决方案--------------------
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="AFR",zhi="13"},
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="WSR",zhi="47"},
前3个值相同,第四个值不同,这样最终结果会是什么样?
------解决方案--------------------
public class Test
{
public string Ming { get; set; }
public string Xingbie { get; set; }
public string Xuehao { get; set; }
public string Code { get; set; }
public string zhi { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
List<Test> listTest = new List<Test>() {
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="AFR",zhi="13"},
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="AFR",zhi="47"},
new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="WSR",zhi="20"},