EfCore 3.1 CosmosDb Query не может быть переведен

System.InvalidOperationException: 'Выражение LINQ' DbSet .GroupBy (source: e => new {ExchangeName = e.ExchangeName, TimeFrame = e.TimeFrame, Symbol = e.Symbol}, keySelector: e => e) 'не могло быть переведено. Либо перепишите запрос в форме, которая может быть переведена, либо явно переключитесь на оценку клиента, вставив вызов AsEnumerable (), AsAsyncEnumerable (), ToList () или ToListAsync (). См. https://go.microsoft.com/fwlink/?linkid=2101038. для дополнительной информации.'

var query = from stick in context.EmaExchangeEventSpecifications
     group stick by new { stick.ExchangeName, stick.TimeFrame, stick.Symbol } into g
     select new { g.Key.ExchangeName, g.Key.TimeFrame, g.Key.Symbol, Count = g.Count() };
var results = query.ToList();

Что мне нужно изменить, чтобы этот запрос переводился? Или, может быть, это не поддерживается в Cosmos?


person Darthg8r    schedule 22.02.2020    source источник


Ответы (2)


Теперь у нас есть рабочий элемент для включения этой поддержки. Отследить можно отсюда. https://github.com/Azure/azure-cosmos-dotnet-v3/issues/1202

Спасибо.

person Mark Brown    schedule 24.02.2020

Принцип работы предложений Group By в EF Core 3.x значительно изменился. Многие выражения, которые раньше поддерживались, больше не поддерживаются:

https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#linq-queries-are-no-longer-evaluated-on-the-client

person Phil Sandler    schedule 22.02.2020
comment
Да, но что именно в этом запросе имеет проблему при оценке на стороне сервера? В RDMS нет причин, по которым это не выполнялось бы на стороне сервера. - person Darthg8r; 23.02.2020
comment
Я не знаю ответа. Я задал почти тот же вопрос: stackoverflow.com/questions/60213529/. Было бы здорово, если бы они точно задокументировали, что работает, а что нет. - person Phil Sandler; 23.02.2020