Как получить запрос с конкретным c ID из базы данных в C#. net API - PullRequest
0 голосов
/ 02 августа 2020

Я хочу получить строку в своей базе данных по идентификатору или значению. На данный момент я пробовал несколько способов и еще не нашел решения.

Этот метод возвращает всех клиентов, что мне нужно сделать, чтобы изменить приведенное ниже, чтобы вернуть 1 клиента по идентификатору, который я предоставил к методу. Или какой другой метод я могу использовать для этого.

// GET: api/Customer/5
    [Route("api/Customer/{id}")]
    [HttpGet]
    [ResponseType(typeof(CustomerReqDTO))]
    public IHttpActionResult GetCustomer(int id)
    {
        var customer = db.Customers.Include(c => c.customer_id).Select(c =>
        new CustomerReqDTO()
        {
            customer_id = c.customer_id,
            first_name = c.first_name,
            last_name = c.last_name,
            email = c.email,
            username = c.username


        });    
        
        if (customer == null)
        {
            return NotFound();
        }

        return Ok(customer);
    }

Я тоже пробовал использовать этот подход, но для объекта бронирования:

// GET: api/Bookings/5
    [Route("api/Bookings/{id}")]
    [HttpGet]
    [ResponseType(typeof(BookingDTO))]
    public IHttpActionResult GetBooking(int id)
    {
        

        var bookingTest = from b in db.Bookings
                   where b.booking_id.Equals(id)
                   select b;

        if (bookingTest == null)
        {
            return NotFound();
        }

        return Ok(bookingTest);

    }

1 Ответ

1 голос
/ 02 августа 2020

Метод фильтрации вашего результата: Where. Вы можете сделать что-то вроде этого

var customer = db.Customers
    .Where(c => c.customer_id == id)
    .Select(c => new CustomerReqDTO()
    {
        customer_id = c.customer_id,
        first_name = c.first_name,
        last_name = c.last_name,
        email = c.email,
        username = c.username


    })
    .FirstOrDefault(); 

Возможно, вы захотите преобразовать свой контроллер в async, чтобы более эффективно использовать пул потоков, тогда вы можете использовать async версию FirstOrDefault

var customer = await db.Customers
    .Where(c => c.customer_id == id)
    .Select(c => new CustomerReqDTO()
    {
        customer_id = c.customer_id,
        first_name = c.first_name,
        last_name = c.last_name,
        email = c.email,
        username = c.username


    })
    .FirstOrDefaultAsync(); 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...