c# - 如何使用 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 |
解决方案
我得到了答案:
//使用 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();
}
}
}
推荐阅读
- c# - LINQ:在 5 分钟内按日期范围分组
- python - Python版本和Jupyter Notebook的问题
- eclipse - eclipse 团队资源管理器 git jar 文件未加载
- javascript - 如何使用单个 HTML 按钮以可见方式切换 React 小部件
- javascript - 使用 css 更改位置,避免使用 flexbox 和 javascript (append, insertAfter)
- python - 无法使用带有抽象静态方法的 cythonized 模块
- javascript - D3.js:如何平移两个轴,但只缩放一个?
- windows - 控制 Perl 认为的“系统外壳”
- spring-webflux - Spring webflux difference between block, flatmap and subscribe
- python - Django Admin changeform_view methosdont' permit open edit data