List<T> 重复记录合并 数量相加
实体类如下
- C# code
public partial class ProductItem { /// <summary> /// 订单编号 /// </summary> public string orderId { get; set; } /// <summary> /// 条形码 /// </summary> public string barCode { get; set; } /// <summary> /// 产品名称 /// </summary> public string Title { get; set; } /// <summary> /// 单价 /// </summary> public string Price { get; set; } /// <summary> /// 订货数量 /// </summary> public string quantity { get; set; } /// <summary> /// 规格 /// </summary> public string Spec { get; set; } /// <summary> /// 优惠价 /// </summary> public double preferPrice { get; set; } /// <summary> /// 原价 /// </summary> public double costPrice { get; set; } /// <summary> /// 审核备注 /// </summary> public string auditMemo { get; set; } }需要在这里判断如果barCode 条形码相同的情况下合并为一个商品quantity 订货数量相加
- C# code
List<Model.ProductItem> listProductItem = new List<Model.ProductItem>();List<Model.SellOrderCart> listOrderCart = SellOrderCart.GetModelList(OrderID);foreach (Model.SellOrderCart item in listOrderCart){ Model.ProductItem modelProductItem = new Model.ProductItem(); modelProductItem.orderId = item.OrderID.ToString(); modelProductItem.barCode = SellOrder.GetSpec(item.Title, item.ItemCode, item.GoodsTypeID, item.GoodsID, item.Specs, "", item.YGD); modelProductItem.Title = SellOrder.GetTitle(item.Title, item.SetTableID); modelProductItem.Price = item.SalePrice.ToString(); modelProductItem.quantity = item.Quantity.ToString(); modelProductItem.Spec = modelProductItem.barCode; modelProductItem.preferPrice = Convert.ToDouble(item.SalePrice); modelProductItem.costPrice = Convert.ToDouble(item.SalePrice); modelProductItem.auditMemo = SellOrder.GetAuditMemo(item.UserRemark, item.YGD); //如何判断barCode 条形码相同的情况下合并为一个商品quantity 订货数量相加 listProductItem.Add(modelProductItem);}[解决办法]
代码仅供参考:
- C# code
Dictionary<string, Model.ProductItem> productDic = new Dictionary<string, Model.ProductItem>(); List<Model.SellOrderCart> listOrderCart = SellOrderCart.GetModelList(OrderID); foreach (Model.SellOrderCart item in listOrderCart) { string barCode = SellOrder.GetSpec(item.Title, item.ItemCode, item.GoodsTypeID, item.GoodsID, item.Specs, "", item.YGD); if (productDic.ContainsKey(barCode)) { productDic[barCode].quantity += item.Quantity.ToString(); } else { Model.ProductItem modelProductItem = new Model.ProductItem(); modelProductItem.orderId = item.OrderID.ToString(); modelProductItem.barCode = barCode; modelProductItem.Title = SellOrder.GetTitle(item.Title, item.SetTableID); modelProductItem.Price = item.SalePrice.ToString(); modelProductItem.quantity = item.Quantity.ToString(); modelProductItem.Spec = modelProductItem.barCode; modelProductItem.preferPrice = Convert.ToDouble(item.SalePrice); modelProductItem.costPrice = Convert.ToDouble(item.SalePrice); modelProductItem.auditMemo = SellOrder.GetAuditMemo(item.UserRemark, item.YGD); productDic.Add(barCode, modelProductItem); } }
[解决办法]
[解决办法]
List<ProductItem> p = new List<ProductItem>();
p.Add(new ProductItem() { orderId = "1", barCode = "1", quantity = "2" });
p.Add(new ProductItem() { orderId = "2", barCode = "1", quantity = "3" });
p.Add(new ProductItem() { orderId = "3", barCode = "3", quantity = "2" });
p.Add(new ProductItem() { orderId = "4", barCode = "4", quantity = "3" });
var query = from t in p
group t by t.barCode into g
select g.Take(1).Select(c => new ProductItem()
{
orderId = c.orderId,
barCode = c.barCode,
Spec = c.Spec,
Title = c.Title,
auditMemo = c.auditMemo,
costPrice = c.costPrice,
preferPrice = c.preferPrice,
Price = c.Price,
quantity = p.Where(d => d.barCode == c.barCode).Select(ee => int.Parse(ee.quantity)).Sum().ToString()
});
List<ProductItem> reval = new List<ProductItem>();
foreach (var r in query)
{
reval.Add(r.First());
}
[解决办法]
- C# code
var vardt = from p in modelProductItem group p by new {p.orderId ,p.barCode} into g let sum = g.Sum(x => int.Parse(x.quantity)) select new { orderId= g.Key,//这里只写了两个字段,其他字段自己加上就行了 Sum = sum };