首页 > 解决方案 > 如何使用 Linq 从数据库中查找和删除不匹配的记录

问题描述

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

上传表:

ID 文件名 网址 员工ID
1 主页.jpg C:\home.jpg 1
2 花.jpg C:\花.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 员工姓名 电话号码
1 约瑟夫 89772
2 红润 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 文件名 网址 员工ID
1 主页.jpg C:\home.jpg 1

标签: c#linqentity-framework-coreasp.net-core-webapiasp.net-core-3.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();
                    }
        }
    }

推荐阅读