使用AspNet Core OData和Entity Framework Core与GROUP进行聚合

编程入门 行业动态 更新时间:2024-10-28 20:31:54
本文介绍了使用AspNet Core OData和Entity Framework Core与GROUP进行聚合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

简单的OData聚合在Entity Framework Core(SQL Sever)和Asp.Net Core上失败:

Simple OData aggregation fails on Entity Framework Core (SQL Sever) and Asp.Net Core:

odata/file?$apply=groupby((FileType))

由于无法翻译使用过的GroupBy LINQ表达式警告:

Due to inability to translate used GroupBy LINQ expression warning is issued:

Microsoft.EntityFrameworkCore.Query: Warning: The LINQ expression 'GroupBy(new GroupByWrapper() {GroupByContainer = new LastInChain() {Name = "FileType", Value = [$it].FileType}}, [$it])' could not be translated and will be evaluated locally.

然后引发异常:

system.security.verificationexception operation could destabilize the runtime

最相关的堆栈:

at lambda_method(Closure , File ) at System.Linq.Lookup`2.Create[TSource](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer) at System.Linq.GroupedEnumerable`3.GetEnumerator() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()

使用的NuGet软件包版本:

Used NuGet packages versions:

  • Microsoft.AspNetCore.OData 7.0.1
  • Microsoft.EntityFrameworkCore.SqlServer 2.1.1
  • Microsoft.AspNetCore 2.1.2

显示该问题的回购: github/xmichaelx/ODataGroupByTest

在GitHub上的问题: github/OData/WebApi/issues/1578

Issue on GitHub: github/OData/WebApi/issues/1578

我不确定问题出在哪里,EF Core是否应该能够将LINQ查询转换为有效的SQL或OData会导致难以转换GroupBy表达式.在解决之前,我正在寻找一些解决方法.

I'm not sure where the issue lies, whether EF Core should be able to convert LINQ query to valid SQL or OData generates difficult to convert GroupBy expression. Until it's sorted out I'm looking for some workaround.

推荐答案

使用针对EF Core的Linq2Db扩展作为解决方法.

Use Linq2Db extensions to EF Core as workaround.

添加NuGet软件包后:

After adding NuGet packages:

  • linq2db 2.2.0
  • linq2db.EntityFrameworkCore 1.0.1

并从

public IActionResult Get() { return Ok(_db.Files); }

public IActionResult Get() { return Ok(_db.Files.ToLinqToDB()); }

一切正常.

修正分支: github/xmichaelx/ODataGroupByTest/tree/issue-workaround linq2db.EntityFrameworkCore: github/linq2db/linq2db.EntityFrameworkCore

Branch with fix: github/xmichaelx/ODataGroupByTest/tree/issue-workaround linq2db.EntityFrameworkCore : github/linq2db/linq2db.EntityFrameworkCore

求和,平均,最小,最大有效,countdistinct不起作用

sum, avg, min, max works, countdistinct does not work

更多推荐

使用AspNet Core OData和Entity Framework Core与GROUP进行聚合

本文发布于:2023-11-14 16:23:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1587945.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:OData   Core   AspNet   GROUP   Framework

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!