Как написать запрос LINQ для извлечения определенных записей и генерации нового результата одновременно? - PullRequest
1 голос
/ 06 июля 2019

Мне нужно обновить одно поле в строке таблицы после извлечения двух записей из одной строки. В качестве простой практики я извлек две записи по отдельности, создал новое значение и затем обновил это конкретное свойство через платформу Entity. Я думаю, что есть лучший способ сделать то же самое с меньшим количеством кода. Если кто-то может предложить, пожалуйста.

if (objModel.amountpaid==0)
                {
                    using (estatebranchEntities db=new estatebranchEntities())
                    {
                        int rentVar = Convert.ToInt32(db.PropertyDetails.Where(m => m.propertyid == objVM.propertyid).Select(m => m.rent).SingleOrDefault());
                        int balanceVar = Convert.ToInt32(db.PropertyDetails.Where(m => m.propertyid == objVM.propertyid).Select(m => m.balance).SingleOrDefault());
                        int balanceUpdateVar = (rentVar + balanceVar);
                        var propInfo = new PropertyDetail() { balance = balanceUpdateVar };
                        //var result = (from a in db.PropertyDetails
                        //              where a.propertyid == objVM.propertyid
                        //              select new PropertyDetail
                        //              {
                        //                  rent = a.rent,
                        //                  balance = a.balance
                        //              }).ToList();

                        db.PropertyDetails.Attach(propInfo);
                        db.Entry(propInfo).Property(z => z.balance).IsModified = true;
                        db.SaveChanges();
                    }
                }

1 Ответ

0 голосов
/ 06 июля 2019

Вот то, что я думаю, вы можете сделать.

Получите данные один раз и обновите один раз.

using (estatebranchEntities db=new estatebranchEntities())
{
    var propDetails = db.PropertyDetails.FirstOrDefault(m => m.propertyid == objVM.propertyid);
    if (propDetails != null)
    {
        int rentVar = Convert.ToInt32(propDetails.rent);
        int balanceVar  = Convert.ToInt32(propDetails.balance);
        int balanceUpdateVar = rentVar + balanceVar;
        //now do the update
        propDetails.balance = balanceUpdateVar;
        db.Entry(proDetails).State = EntityState.Modified;
        db.SaveChanges();
    }

}

, если вам нужно использовать rentVar, balanceVar илиbalanceUpdateVar, вне оператора using, затем объявите их вне его.

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