//******第一种*****//
List<OrderPay> OrderPays = new List<OrderPay>(); //这个里面是有支付方式及支付值的
List<OrderPay> orderPaysMerge = new List<OrderPay>(); //新定义的
orderPaysMerge.Clear();
for (int i = OrderPays.Count - 1; i >= 0; i--) //倒序剔除
{
if (OrderPays[i].PayName == "Cash")
{
orderPaysMerge.Add(OrderPays[i]);
OrderPays.Remove(OrderPays[i]);
}
}
var mergeResult = (from orderpay in orderPaysMerge
group orderpay by orderpay.PayName into g
select new OrderPay
{
PayName = g.Key,
PayValue = g.Sum(m => m.PayValue)
}).ToList();
foreach (var item in mergeResult)
{
OrderPays.AddRange(mergeResult);
}
//最后拿List OrderPays做最后运算
第二种:
//*****第二种*****//
List<OrderPay> OrderPays = new List<OrderPay>(); //这个里面是有支付方式及支付值的
List<OrderPay> orderPaysMerge = new List<OrderPay>();
var mergeResult = (from orderpay in OrderPays
group orderpay by orderpay.PayName into g
where g.Key == "Cash"
select new OrderPay
{
PayName= g.Key,
PayValue = g.Sum(m => m.PayValue)
}).ToList(); //转换成List方便后面使用
var removeResult = OrderPays.Where(m => m.PayName != "Cash").ToList();
removeResult.AddRange(mergeResult);
//最后拿List removeResult做下一步运算
list.Add(new model { name = "Cash", Pay = 500, Dicount = 2 });
list.Add(new model { name = "Bank", Pay = 1200, Dicount = 0 });
list.Add(new model { name = "Cash", Pay = 600, Dicount = 2 });
var g = list.GroupBy(x => x.name);
var a = g.Select(x => new { name = x.Key, Pay = x.Sum(y => y.Pay), Dicount = x.Sum(y => y.Dicount) });
foreach(var x in a) Console.WriteLine(x);
list.Add(new model { name = "Cash", Pay = 500, Dicount = 2 });
list.Add(new model { name = "Bank", Pay = 1200, Dicount = 0 });
list.Add(new model { name = "Cash", Pay = 600, Dicount = 2 });
var g = list.GroupBy(x => x.name);
var a = g.Select(x => new { name = x.Key, Pay = x.Sum(y => y.Pay), Dicount = x.Sum(y => y.Dicount) });
foreach(var x in a) Console.WriteLine(x);