Выберите вместе с количеством в одном запросе, используя Linq to Entities - PullRequest
0 голосов
/ 24 апреля 2020

Допустим, у меня есть два API-метода для получения общего количества элементов и части элементов для некоторой страницы. Есть ли способ объединить эти методы и получить общее количество, если необходимо, и некоторую часть этих элементов в одном запросе?

public async Task<SomeView[]> Get(SomeViewFilter filter, int skip, int take)
{
    using var db = dbContext();
    return await db
     .SomeTable()
     .Filter(filter)
     .Skip(skip)
     .Take(take)
     .ToArrayAsync();
}

public async Task<int> Count(SomeViewFilter filter)
{
    using var db = dbContext();
    return await db
     .SomeTable()
     .Filter(filter)
     .CountAsync();
}

1 Ответ

0 голосов
/ 25 апреля 2020

После объединения skip и take станут необязательными параметрами, поэтому присвойте им значение по умолчанию, например -100 (это используется для определения guish, какое суждение ввести)

Затем измените тип возврата метода на object, указывая, что метод может возвращать данные другого типа.

public async Task<object> Get(SomeViewFilter filter, int skip = -100, int take = -100)
    {
        using var db = dbContext();
        if (skip == -100 && take == -100)
        {
              return await db
                        .SomeTable()
                        .Filter(filter)
                        .CountAsync();
        }
        else
        {
               return await db
                        .SomeTable()
                        .Filter(filter)
                        .Skip(skip)
                        .Take(take)
                        .ToArrayAsync().
        } 
    }
...