繁体   English   中英

如何在我的ASP.NET MVC 5项目中使用LINQ LAMBDA更新记录

[英]How to update a record using LINQ LAMBDA in my ASP.NET MVC 5 Project

我是实体框架和LINQ的新手。 我陷入一个问题,我需要首先检查记录是否已经存在,如果存在,那么我需要相应地使用RESUMEID列更新记录。 如果没有,那么我需要添加记录。 我能够成功添加,但是我不知道如何在LINQ中更新记录。

以下是我的尝试:

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(ReferralViewModel viewModel)
    {
        var candidateId = User.Identity.GetUserId();
         // I AM CONFUSED ABOUT BELOW STATEMENT
        var IsDupeReferral = _context.Referrals
       .Where(r => (r.CandidateId == candidateId)
      && (r.CompanyId == viewModel.CompanyId) && (r.SkillId == viewModel.SkillId))
      .Select(r=>r.ReferralId).SingleOrDefault();

        if(IsDupeReferral!=0)
        {
          //IF I FIND DUPE REFERRAL RECORD I WANT TO UPDATE SOME OF THE VALUES IN THAT
                  _context.Referrals.Where(r => r.ReferralId == IsDupeReferral).
             AND UPDATE r.resumeId with viewModel.ResumeId // How to do this?
             // NOT SURE ABOUT BELOW LINE EITHER
            _context.SaveChanges();
        }
        else
        {
           // BELOW CODE IS WORKING FINE
            var referral = new Referral
            {
                ReferralName = viewModel.ReferralName,
                ResumeId = viewModel.ResumeId,
                CandidateId = candidateId,
                DegreeId = viewModel.DegreeId,
                CoverLetterId = viewModel.CoverLetterId,
                SkillId = viewModel.SkillId
            };

            if (!string.IsNullOrEmpty(viewModel.TempCompany))
            {
                var newCompany = new Company
                {
                    CompanyName = viewModel.TempCompany
                };
                newCompany.Referrals.Add(referral);
                _context.Companies.Add(newCompany); ;
            }
            else
            {
                referral.CompanyId = viewModel.CompanyId.Value;
                _context.Referrals.Add(referral);
            }
            _context.SaveChanges();
        }

        return RedirectToAction("ReferralCenter");
    }
Referral referral = _context.Referrals.FirstOrDefault(r=> r.ReferralId = SomeId);
if(referral == null) // then referral does not exist - add it
{
    referral = new Referral{
                ReferralName = viewModel.ReferralName,
                ResumeId = viewModel.ResumeId,
                CandidateId = candidateId,
                DegreeId = viewModel.DegreeId,
                CoverLetterId = viewModel.CoverLetterId,
                SkillId = viewModel.SkillId
            };
    _context.Referrals.Add(referral);
}   
else  // referral already exists - update its values
{
    //make changes to referral
    referral.ReferralName = viewModel.ReferralName;
    referral.ResumeId = viewModel.ResumeId;
    referral.CandidateId = candidateId;
    referral.DegreeId = viewModel.DegreeId;
    referral.CoverLetterId = viewModel.CoverLetterId;
    referral.SkillId = viewModel.SkillId;

}
_context.SaveChanges(); //no matter added or updated - save the changes

这是解决方案

//IF I FIND DUPE REFERRAL RECORD I WANT TO UPDATE SOME OF THE VALUES IN THAT
var referral = _context.Referrals.FirstOrDefault(r => r.ReferralId == IsDupeReferral);
// AND UPDATE r.resumeId with viewModel.ResumeId
if (referral !=null) {
    referral.resumeId = viewModel.ResumeId; 
    _context.Entry(referral).State = System.Data.EntityState.Modified;
    _context.SaveChanges();
}

实际上,您不需要获取IsDupeReferral,然后再次请求记录。 尝试按以下方式合并您的代码:

var referral = _context.Referrals
       .Where(r => (r.CandidateId == candidateId)
      && (r.CompanyId == viewModel.CompanyId) && (r.SkillId == viewModel.SkillId)).SingleOrDefault();

    if (referral !=null) {
        referral.resumeId = viewModel.ResumeId; 
        _context.Entry(referral).State = System.Data.EntityState.Modified;
        _context.SaveChanges();
    }
    else {

     // add a new record 
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM