Groupby локально выполняет обновление для Entity Framework Core 2.1.4 внутри функции Azure версии 2 - PullRequest
0 голосов
/ 27 декабря 2018

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 Ответ

0 голосов
/ 28 декабря 2018

Мне удалось воспроизвести проблему в чистом проекте .NetCore, так что функция Azure не в этом.Настоящей проблемой может быть сервер sql.Когда я нацеливаюсь на SQL Server 2012, я всегда могу решить проблему;но когда я нацеливаюсь на sql server 2016, показывается оператор GROUP BY, и я больше не вижу предупреждения.Профилировщик SQL показывает тот же результат.

...