Groupby локально выполняет обновление для Entity Framework Core 2.1.4 внутри функции Azure версии 2
Microsoft говорит, что Entity Framework Core 2.1 генерирует GROUPBY
заявление на сервер. У меня есть функция Azure, использующая Entity Framework Core 2.1.4, но все же получил:
Microsoft.EntityFrameworkCore.Query: Предупреждение: выражение LINQ 'Sum()' не может быть переведено и будет оцениваться локально.
Microsoft.EntityFrameworkCore.Query: Предупреждение: выражение LINQ 'Count()' не может быть переведено и будет оцениваться локально.
Мой запрос:
var q = await db.TblRainGauging5minutes
.Where(x => x.G_ID == 1)
.GroupBy(x => new { x.G_ID })
.Select(g => new {
Id = g.Key.G_ID,
Total = g.Sum(v => v.R_Value ?? 0),
Rows = g.Count()
})
.ToListAsync();
Вот мои настройки проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.ExpressionMapping" Version="2.0.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="6.0.0" />
<PackageReference Include="AzureFunctions.Autofac" Version="3.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.4" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.1.1" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.24" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
</ItemGroup>
Что-то не так в моей настройке или коде? Может быть, это просто не работает в функции Azure 2? Я изменил целевую структуру с netstandard2.0
в netcoreapp2.1.4
и я все еще понимаю проблему.
1 ответ
Мне удалось воспроизвести проблему в чистом проекте.NetCore, поэтому проблема не в функции Azure. Настоящей проблемой может быть сервер sql. Когда я нацеливаюсь на SQL Server 2012, я всегда могу решить проблему; но когда я нацеливаюсь на sql server 2016, показывается оператор GROUP BY, и я больше не вижу предупреждения. Профилировщик SQL показывает тот же результат.