ASP.NET Web API 和 MongoDB Atlas - 从数据库中检索特定数据的方法

ASP.NET Web API and MongoDB Atlas - Method to Retrieve Specific Data from Database

我在 Visual Studio Community Edition 2017 中创建了一个 ASP.NET Web API 项目(使用 .NET Framework 4.6.1),它通过 MongoDb Atlas MongoDB .NET 驱动程序。该项目存储 "Patients" 具有一些不同的属性。

我已经成功地实现了 return "Patient" 的 Get() 方法。我现在想实现一个 GetMedications() 方法来 return 仅特定 "Patient" 的药物。以下是我的 "PatientsController" 文件中的相关方法:

public async Task<Patient> Get(string id)
{
    try
    {
        ObjectId internalId = GetInternalId(id);
        return await _patients.Find(p => p.Id == id || p.InternalId == internalId).FirstOrDefaultAsync();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

[Route("api/patients/{id}/medications")]
public async Task<Medication> GetMedications(string id)
{
    try
    {
        ObjectId internalId = GetInternalId(id);
        var patient = await _patients.Find(p => p.Id == id || p.InternalId == internalId).FirstOrDefaultAsync();
        return patient.Medications;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

private ObjectId GetInternalId(string id)
{
    ObjectId internalId;
    if (!ObjectId.TryParse(id, out internalId))
        internalId = ObjectId.Empty;

    return internalId;
}

Visual studio 为 return patient.Medications 显示此错误:

Cannot implicitly convert type 'Systems.Collections.Generic.ICollection<WebAPIDemo.Models.Medication>' to 'WebAPIDemo.Models.Medication'

这是我的病人 class(以及其他适用的 classes):

public class Patient
{
    [BsonId]
    public ObjectId InternalId { get; set; }

    public string Id { get; set; }
    public string Name { get; set; }
    public ICollection<Ailment> Ailments { get; set; }
    public ICollection<Medication> Medications { get; set; }
}

public class Medication
{
    public string Name { get; set; }
    public int Doses { get; set; }
}

public class Ailment
{
    public string Name { get; set; }
}

如何正确编写 GetMedications() 方法?

你的问题是当你的方法只有 return 一个项目时你正在 return 收集一个集合,所以你需要确保类型匹配。

更改方法的 return 类型:

public async Task<ICollection<Medication>> GetMedications(string id)