Обновление нескольких строк различными данными с указанным идентификатором c с использованием Entity Framework Core - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть следующая таблица:

enter image description here

Я хочу обновить ApproveStatus строк с RequestId=2, где goodsId = 4 отклонено и goodsId=1 одобрен.

Мой вопрос заключается в том, как сделать это, используя Entity Framework Core в ASP. NET Core 2.2.

Это то, что я сделал до сих пор:

// model contain "approve" and "reject" strings and requestId which came from view
public IActionResult ApproveList(List<ApprovedGoodsByAdminAssistVM> model)  
{
    // I got the requestId from model
    var id = model.Select(s => s.RequestId).FirstOrDefault(); 

    // Filtered the two record with RequestId=2 from the table 
    var goodsList = context.RequestGoodsBrand
                           .Where(x => x.RequestId == id).ToList(); 
}

Что делать дальше?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020
public IActionResult ApproveList(List<ApprovedGoodsByAdminAssistVM> model)
    {
        var requestId = model.Select(x => x.RequestId).FirstOrDefault();
        var approvedItems = model
            .Where(x => x.RequestId == requestId && x.ApproveStatus == 1)
            .Select(x => x.GoodsId).ToList();

        var rejectedItems = model
            .Where(x => x.RequestId == requestId && x.ApproveStatus == 0)
            .Select(x => x.GoodsId).ToList();

        var goodsToBeApproved = context.RequestGoodsBrand
            .Where(x => x.RequestId == requestId && approvedItems.Contains(x.GoodsId)).ToList();
        goodsToBeApproved.ForEach(x => x.IsApproved = 1);
        context.SaveChanges();
        var goodsToBeRejected = context.RequestGoodsBrand
                .Where(x => x.RequestId == requestId && rejectedItems.Contains(x.GoodsId)).ToList();
        goodsToBeRejected.ForEach(x => x.IsApproved = 0);
        context.SaveChanges();
        return Json("Done!");
    }
0 голосов
/ 25 апреля 2020

Если я не ошибаюсь, эти изменения могут решить вашу проблему.

public IActionResult ApproveList(List<ApprovedGoodsByAdminAssistVM> model)   
{
   var id = model.Select(s => s.RequestId).FirstOrDefault();  
   var goodsList = context.RequestGoodsBrand
      .Where(x => x.RequestId == id).ToList();  

   var rejectedItems = goodsList.Where(x => x.GoodsId == 4).ToList();
   var approvedItems = goodsList.Where(x => x.GoodsId == 1).ToList();

   foreach (var item in rejectedItems)
       item.ApproveStatus = "rejected";

   foreach (var item in approvedItems)
       item.ApproveStatus = "approved"

   context.SaveChanges();
}

Вместо слов волхвов c («Отклонено», «Одобрено») лучше использовать перечисление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...