专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > LINQ

linq 分组求和的有关问题

发布时间:2011-06-24 21:21:21 文章来源:www.iduyao.cn 采编人员:星星草
linq 分组求和的问题
如题,比如一个对象是
  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"},
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: