ASP Net Core Web API: клиентская группа GroupBy не поддерживается - PullRequest
2 голосов
/ 27 февраля 2020

Я новичок здесь, и новичок ie в asp. net core.

Я пишу веб-API, используя asp. net core 3.0. Я написал следующий код конечной точки API, чтобы получить список Databases сущностей и сгруппировать их по полю с именем Value из другого объекта Type.

//GET:api/Databases/graph
[HttpGet("graph")]
public async Task<ActionResult<IEnumerable<IGrouping<string, Database>>>> GetGraphDatabases()
{
    return await _context.Databases
        .Include(t => t.Type)
        .Where(d => d.Type.Code == "DATABASE_TYPE")
        .GroupBy(d => d.Type.Value)
        .ToListAsync();
}

Но когда я пытаюсь достичь конечной точки, я получаю следующее сообщение об ошибке: InvalidOperationException: клиентская группа GroupBy не поддерживается.

Я проверял это ответ но это мало помогло.

Не могли бы вы поддержать.

1 Ответ

2 голосов
/ 27 февраля 2020

Вскоре этот тип GroupBy не поддерживается в EF Core 3.0.

Ожидается, что вы явно переключитесь на оценку клиента перед этим оператором. Что для версии syn c так же просто, как вставить .AsEnumerable(). Для версии asyn c это не так просто - есть метод AsAsyncEnumerable(), но тогда вам нужен дополнительный пакет, чтобы получить GroupBy и другие доступные операторы LINQ.

Вероятно, самый простой способ решить его (с стоимость одного дополнительного списка в памяти) состоит в том, чтобы использовать ToListAsync() для завершения асинхронной части c, а затем использовать обычный LINQ to Objects для остальных.

например что-то вроде

return (await _context.Databases
    .Include(t => t.Type)
    .Where(d => d.Type.Code == "DATABASE_TYPE")
    .ToListAsync())
    .GroupBy(d => d.Type.Value);

Дополнительный пакет, о котором я говорю, это System.Linq.Asyn c. Для получения дополнительной информации см. Преобразование запросов EF Core с 2.2 на 3.0 - asyn c await .

...