c# - 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
问候
解决方案
而不是生成 INSERT 您应该搜索具有相同ProductId
(CartId
当然)的先前记录并仅在没有找到任何内容时调用 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();
推荐阅读
- jdbc - 如何在不调用 SHUTDOWN 语句的情况下将 HSQLDB 内存数据保存到文件
- jquery - Jquery Datatable在添加新记录后不更新表,在Angular4应用程序中使用
- python - 非冻结集的集成员资格
- jquery - 当页面上有多个下拉菜单时,如何使用多个下拉选项向元素添加类?
- python - 如何使用 aiohttp (python 3.6) 实现 websocket 感知反向代理
- python - Scrapy 分页在多个列表中失败
- java - OpenOffice + jodconverter 的字体问题
- jquery - Ajax 无法使用实体框架 linq 响应
- javascript - 找到与任意形状四边形相交的规则网格单元
- python - 改变矩形的不透明度