c# - 使用 Entity Framework Core 重用查询
问题描述
我正在尝试使用 EF-Core 进行一些查询,并且我有以下代码
public List<Visitation> GetAllVisitations()
{
return this.hospital.Visitations
.Where(v => v.DoctorId == this.Doctor.Id)
.Select(v => new Visitation
{
Doctor = v.Doctor,
Patient = v.Patient,
Date = v.Date,
Comments = v.Comments
})
.ToList();
}
public List<Visitation> GetVisitationByPatient(int id)
{
var patient = this.GetPatientById(id);
return this.hospital.Visitations
.Where(v => v.PatientId == patient.Id)
.Select(v => new Visitation
{
Doctor = v.Doctor,
Patient = v.Patient,
Date = v.Date,
Comments = v.Comments
})
.ToList();
}
很明显,这两种方法中的 Select 语句是相同的。但是我知道 EF Core 使用 Expression<Func>,而不是 Func,因此我不知道如何制作一个可以在两个 Select 语句中使用的表达式。
解决方案
在您调用之前,查询不会执行.ToList()
。因此,您可以将部分查询带到.Where()
并将其传递给添加该Select()
部分的函数。
像这样的东西:
public List<Visitation> GetAllVisitations()
{
var query = this.hospital.Visitations
.Where(v => v.DoctorId == this.Doctor.Id);
return this.addTransformation(query)
.ToList();
}
public List<Visitation> GetVisitationByPatient(int id)
{
var patient = this.GetPatientById(id);
var query = this.hospital.Visitations
.Where(v => v.PatientId == patient.Id)
return this.addTransformation(query)
.ToList();
}
public IQueriable<Visitation> AddTransformation(IQueriable<Visitation> query)
{
return query.Select(v => new Visitation
{
Doctor = v.Doctor,
Patient = v.Patient,
Date = v.Date,
Comments = v.Comments
});
}
推荐阅读
- docker - 在 Mesos / Marathon 中设置默认的 docker run 参数
- spring - SchemaCollection 上的多个 XSD:schemaElement 不能为空?
- vb.net - DataGridView:如何使回车键添加新行而不是更改当前单元格?[视觉基础]
- django - 如何根据用户在 Django ListView 中单击的内容设置字段值
- php - Laravel:如何创建产品变体组合并存储在数据库中
- reactjs - 如何迁移到 react-redux-firebase v3
- xcode - 如何在 Xcode AppleScript 应用程序中使用系统图标?
- r - 有没有办法在 ubuntu 上安装 R 版本 3.3.0?
- c# - 合并时的服务器或本地版本?
- php - 使用 Yii2 队列扩展和 Postgres 10.4 时出现错误“尚未等待锁定”