【问题标题】:Reusing queries with Entity Framework Core使用 Entity Framework Core 重用查询
【发布时间】:2020-07-15 18:09:38
【问题描述】:

我正在尝试使用 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,因此我不知道如何制作一个可以在两个 Select 语句中使用的表达式。

【问题讨论】:

标签: c# .net entity-framework entity-framework-core


【解决方案1】:

在您调用 .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
                });
}

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多