简体   繁体   English

使用 Entity Framework Core 重用查询

[英]Reusing queries with Entity Framework Core

I'm trying to make some queries using EF-Core and I have the following code我正在尝试使用 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();
    }

It is pretty obvious that the Select statement is the same in both methods.很明显,Select 语句在两种方法中是相同的。 However I know that EF Core uses Expression<Func>, rather than Func therefore I do not know how to make an Expression, which can be used in both Select statements.但是我知道 EF Core 使用 Expression<Func>,而不是 Func,因此我不知道如何制作一个可以在 Select 语句中使用的表达式。

The query won't execute until you call .ToList() .在您调用.ToList()之前,查询不会执行。 So you may take the partial query up to the .Where() and pass it to a function that adds the Select() portion.因此,您可以将部分查询带到.Where()并将其传递给添加Select()部分的 function。

Something like this:像这样的东西:

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
                });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM