ASP.NET Web API и MongoDB Atlas - метод для извлечения определенных данных из базы данных - PullRequest
0 голосов
/ 05 мая 2018

Я создал проект ASP.NET Web API (с использованием .NET Framework 4.6.1) в Visual Studio Community Edition 2017, который использует MongoDb Atlas через драйвер MongoDB .NET. В проекте «Пациенты» хранится несколько разных атрибутов.

Я успешно реализовал метод Get (), чтобы вернуть «Patient». Теперь я хочу реализовать метод GetMedications (), чтобы возвращать только лекарства определенного «пациента». Ниже приведены подходящие методы в моем файле PatientController:

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'

Вот мой класс пациента (и другие соответствующие классы):

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 ()?

1 Ответ

0 голосов
/ 05 мая 2018

Ваша проблема в том, что вы возвращаете коллекцию, когда ваш метод возвращает только один элемент, поэтому вам нужно убедиться, что типы совпадают.

Измените тип возврата вашего метода:

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