首页 > 解决方案 > EF - 如果商品相同,我如何将 2 行 ShoppingCart 合并为 1 行

问题描述

如果用户多次添加相同的产品,我想将这 2 行合并为 1 行。我如何将它们合并到 EF 中?

这是我的桌子。

CREATE TABLE [dbo].[CartDetail](
[Id] [int] IDENTITY(1,1) NOT NULL,
[CartId] [int] NOT NULL,
[ProductId] [int] NOT NULL,
[Qty] [decimal](10, 2) NOT NULL,
[Price] [decimal](18, 2) NOT NULL,
[Discount] [decimal](18, 2) NOT NULL,
[KDV] [decimal](18, 2) NOT NULL,
[CreatedDate] [datetime] NOT NULL,
[Active] [bit] NOT NULL,

我想解释一下我想通过一个老式 SQL 脚本合并它们的方式

Select CartId,
       ProductId,
       SUM(Qty),
       Price,
       Discount,
       KDV
 From CartDetail
 Group By CartId, ProductId, Price, Discount, KDV

问候

标签: c#entity-framework

解决方案


而不是生成 INSERT 您应该搜索具有相同ProductIdCartId当然)的先前记录并仅在没有找到任何内容时调用 Add(...) 。当发现某些东西时 - 增加数量并更新现有记录:

var existingLine = await db.CartDetails
    .FirstOrDefaultAsync(x => x.CartId == cartId && x.ProductId == productId);
if (existingLine == null) 
{
    db.CartDetails.Add(new CartDetails() 
    {
        CartId = cartId,
        ProductId = productId,
        Qty = 1,
        ...
    });
}
else 
{
    existingLine.Qty += 1;
}
await db.SaveChangesAsync();

推荐阅读