【问题标题】:How to find and delete unmatched records from database using Linq如何使用 Linq 从数据库中查找和删除不匹配的记录
【发布时间】:2021-09-30 19:55:17
【问题描述】:

在我的数据库中,我有一个上传表和一个员工表。模型类中有一个Employee类文件和一个Upload Item类文件。我需要编辑员工信息。员工编号 1 有 2 个上传文件。在编辑操作中,用户删除了一个文件(编号:2 图像已删除)。模型被传递到后端。后端获取模型,需要对上传的文件进行验证。上传表有两条员工id 1 的记录。前端代码发送文件请求。在这种情况下,我需要检查表中的哪个文件不匹配。如果发现不匹配的记录,我需要删除它。例如,我需要从上传表中删除记录 id 编号 2。下面我解释一下我的代码。

上传表格:

Id File Name URL EmployeeId
1 home.jpg C:\home.jpg 1
2 flower.jpg C:\flower.jpg 1

上传物品模型类:

public class UploadItem()
{
    [Key]
    public int Id{get;set;}
    public string FileName {get;set;}
    public string URL {get;set;}
    public int EmployeeId {get;set;}
}

员工表:

Id Employee Name PhoneNo
1 Joseph 89772
2 rosy 3244

员工模型类:

public class Employee()
{
    [Key]
    public int Id{get;set;}
    public string EmployeeName {get;set;} 
    public int PhoneNo{get;set;}
    public List<IFormFile> files {get;set;}
    public List<UploadItem> uploadfiles {get;set;}
}

控制器类: //方法总结:需要从上传表中删除不匹配的记录。

[HTTPPOST("EditEmployee")]

public async Task<IActionResult> EditEmployee([FormFrom] Employee model)
{
    if(model.uploadfiles.Count>0)
    {
       var uploadRecordsFromDB= dbContext.Uploads.Where(x=>x.EmployeeId==model.Id).ToList();
       var uploadRecordsFromRequest=model.uploadfiles;
    //Finding unmatched records method1:
       var unMatchedRecords = uploadRecordsFromDb.Where(x=> !uploadRecordsFromRequest.Contains(x)).ToList(); 
    //Finding unmatched recordss method 2:
       var unMatchedRecords1= uploadRecordsFromDB.Where(i => !uploadRecordsFromRequest.Contains(i)).ToList();
    
    }
}

我期望的结果是

Id File Name URL EmployeeId
1 home.jpg C:\home.jpg 1

【问题讨论】:

  • 指定您使用的确切 ORM 版本。
  • 实体框架核心(后端 API Asp.net Core)

标签: c# linq entity-framework-core asp.net-core-webapi asp.net-core-3.1


【解决方案1】:

我得到了答案:

//使用linq查询发现不匹配的记录:

 [HTTPPOST("EditEmployee")]
    
    public async Task<IActionResult> EditEmployee([FormFrom] Employee model)
    {
        if(model.uploadfiles.Count>0)
        {
           
           var uploadRecordsFromDB= dbContext.Uploads.Where(x=>x.EmployeeId==model.Id).ToList();
    var uploadRecordsFromRequestIds=model.uploadfiles.Select(x=>x.Id).ToList();
    var unmatchrecords = (from file in uploadRecordsFromDB 
                                           where !uploadRecordsFromRequestIds.Contains(file.Id) select file).ToList();
        foreach (var unmatchrecord in unmatchrecords) 
                    {
                        dbContext.Uploads.Remove(unmatchrecord);
                        dbContext.SaveChanges();
                    }
        }
    }

【讨论】:

  • @Alexander Petrov 我更新了删除代码
  • 使用 dbContext.Uploads.RemoveRange(unmatchrecords); 的原因很多
猜你喜欢
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
相关资源
最近更新 更多