gpt4 book ai didi

entity-framework - EF Core 3 GroupBy 多列 Count Throws 与扩展但 linq 有效

转载 作者:行者123 更新时间:2023-12-04 00:22:15 24 4
gpt4 key购买 nike

这是引发完整异常的一个:

            var duplicateCountOriginal = _db.TableName
.GroupBy(g => new {g.ColumnA, g.ColumnB, g.ColumnC})
.Count(g => g.Count() > 1);

异常(exception):
System.ArgumentException:类型为“System.Func 2[System.Linq.IGrouping”的表达式2[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.IEnumerable类型的参数1[Microsoft.EntityFrameworkCore.Storage.ValueBuffer] Select[ValueBuffer,ValueBuffer](System.Collections.Generic.IEnumerable 1[Microsoft.EntityFrameworkCore.Storage.ValueBuffer], System.Func 2[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()

我无法理解为什么一个有效或另一个无效。
此外,如果我根据 EF Core 3 更改稍微更改第一个,如下所示
            var duplicateCountOriginal = _db.TableName
.GroupBy(g => new {g.ColumnA, g.ColumnB, g.ColumnC})
.AsEnumerable()
.Count(g => g.Count() > 1);

我得到以下 异常(exception) :
System.InvalidOperationException:客户端投影包含对“Microsoft.EntityFrameworkCore.Metadata.IPropertyBase”常量表达式的引用,该表达式作为参数传递给方法“TryReadValue”。这可能会导致内存泄漏。考虑将此常量分配给局部变量并在查询中使用该变量。见 https://go.microsoft.com/fwlink/?linkid=2103067想要查询更多的信息。

在我看来,ms 给出的链接对这里的任何问题都没有意义。

如果有任何合乎逻辑的解释,请 LMK。

最佳答案

没有合乎逻辑的解释。仅 EF Core 查询翻译还远非完美,并且存在许多缺陷/错误/未处理的情况。

在这个特殊的问题不是查询语法或方法语法(你称之为扩展),而是缺少 SelectGroupBy .如果您重写类似于使用查询语法的方法语法查询,即添加 .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();

那么它将被成功翻译和执行。

关于entity-framework - EF Core 3 GroupBy 多列 Count Throws 与扩展但 linq 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59697083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com