EF - Как я могу объединить 2 линии ShoppingCart в 1, если элементы одинаковы - PullRequest
0 голосов
/ 23 сентября 2019

Если пользователь добавляет один и тот же продукт более 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

С уважением

1 Ответ

2 голосов
/ 23 сентября 2019

Вместо генерации INSERT вы должны искать предыдущую запись с таким же ProductId (и, конечно, CartId) и вызывать Add (...) только тогда, когда ничего не найдено.Когда что-то найдено - увеличьте Qty и обновите существующую запись:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...