【问题标题】:Groupby evaulating locally for Entity Framework Core 2.1.4 inside Azure Function version 2Groupby 在 Azure Function 版本 2 中本地评估 Entity Framework Core 2.1.4
【发布时间】:2018-12-27 01:00:13
【问题描述】:

Microsoft 表示 Entity Framework Core 2.1 会向服务器生成 GROUPBY 语句。我有一个使用 Entity Framework Core 2.1.4 的 Azure 函数,但仍然得到:

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,但我仍然遇到问题。

【问题讨论】:

  • 如果你只尝试.GroupBy(x =&gt; x.G_ID)会怎样
  • @Camilo 我按 2 列分组,只是为了简单起见。

标签: c# entity-framework-core azure-functions entity-framework-core-2.1


【解决方案1】:

我能够用纯 .NetCore 项目重现该问题,因此 Azure Function 不是问题。真正的问题可能是sql server。当我以 sql server 2012 为目标时,我总是会遇到问题;但是当我以 sql server 2016 为目标时,显示 GROUP BY 语句并且我不再看到警告。 SQL 分析器显示相同的结果。

【讨论】:

  • 我花了几个小时进一步测试,发现 Sum 语句才是真正的问题。即使针对 Sql server 2012,在取出 Sum 语句后也不会显示警告。我也尝试过对 int 字段求和。希望有人可以验证这一点,从而节省其他人试图弄清楚发生了什么的时间。
  • 测试在 .netcore Web 应用中执行,TargetFramework=netcoreapp2.2,Microsoft.EntityFrameworkCore 版本 2.2,Microsoft.EntityFrameworkCore.SqlServer 2.2
猜你喜欢
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多