Sev*_*Der 5 entity-framework ef-core-3.0 .net-core-3.1
这是引发完整异常的一个:
var duplicateCountOriginal = _db.TableName
.GroupBy(g => new {g.ColumnA, g.ColumnB, g.ColumnC})
.Count(g => g.Count() > 1);
Run Code Online (Sandbox Code Playgroud)
异常:
System.ArgumentException:“System.Func 2[System.Linq.IGrouping2[Microsoft.EntityFrameworkCore.Storage.ValueBuffer,Microsoft.EntityFrameworkCore.Storage.ValueBuffer],Microsoft.EntityFrameworkCore.Storage.ValueBuffer]”类型的表达式不能用于“System”类型的参数.Func 2[Microsoft.EntityFrameworkCore.Storage.ValueBuffer,Microsoft.EntityFrameworkCore.Storage.ValueBuffer]' of method 'System.Collections.Generic.IEnumerable1[Microsoft.EntityFrameworkCore.Storage.ValueBuffer] Select[ValueBuffer,ValueBuffer](System.Collections.Generic.IEnumerable 1[Microsoft.EntityFrameworkCore.Storage.ValueBuffer], System.Func2[Microsoft.EntityFrameworkCore.Storage.ValueBuffer,Microsoft.EntityFrameworkCore.Storage.ValueBuffer])'(参数'arg1 ')
但是当它被写成 linq 时,同样的事情也有效(我更喜欢扩展)
var duplicateCount =
from a in _db.TableName
group a by new {a.ColumnA, a.ColumnB, a.ColumnC}
into g
where g.Count() > 1
select g.Key;
duplicateCount.Count()
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么一个有效或另一个无效。此外,如果我根据 EF Core 3 更改稍微更改第一个,如下所示
var duplicateCountOriginal = _db.TableName
.GroupBy(g => new {g.ColumnA, g.ColumnB, g.ColumnC})
.AsEnumerable()
.Count(g => g.Count() > 1);
Run Code Online (Sandbox Code Playgroud)
我收到以下异常: System.InvalidOperationException:客户端投影包含对“Microsoft.EntityFrameworkCore.Metadata.IPropertyBase”常量表达式的引用,该表达式作为参数传递给方法“TryReadValue”。这可能会导致内存泄漏。考虑将此常量分配给局部变量并在查询中使用该变量。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2103067。
在我看来,ms 给出的链接对这里的任何问题都没有意义。
如果有任何合乎逻辑的解释,请 LMK。
没有合乎逻辑的解释。仅 EF Core 查询翻译还远非完美,并且存在许多缺陷/错误/未处理的情况。
在这种特殊情况下,问题不在于查询语法或方法语法(您称之为扩展),而是缺少Selectafter GroupBy。如果您重写类似于使用查询语法的方法语法查询,即 add .Where,.Select然后Count:
var duplicateCount = _db.TableName
.GroupBy(g => new {g.ColumnA, g.ColumnB, g.ColumnC})
.Where(g => g.Count() > 1)
.Select(g => g.Key)
.Count();
Run Code Online (Sandbox Code Playgroud)
那么它将被成功翻译和执行。
| 归档时间: |
|
| 查看次数: |
4149 次 |
| 最近记录: |