gpt4 book ai didi

c# - 带有选择非重复计数的 EF Core GroupBy

转载 作者:行者123 更新时间:2023-12-04 14:14:25 26 4
gpt4 key购买 nike

我有一个表,Items,它与两个不同的父项有多对一的关系。

我想为每个 ParentB 选择 ParentA 的计数。

在 SQL 中这很简单:

SELECT "ParentBId", count(distinct "ParentAId") 
FROM "Items"
GROUP BY "ParentBId"

在 Linq 中我有这样的声明:

var itemCounts = await _context.Items
.GroupBy(item => item.ParentBId,
(parentBId, items) => new
{
ParentBId = parentBId,
Count = items.Select(item => item.ParentAId).Distinct().Count(),
}).ToDictionaryAsync(group => group.ParentBId, group => group.Count);

运行此查询时,EF 因以下错误而崩溃:

System.InvalidOperationException: Processing of the LINQ expression 'AsQueryable<string>(Select<Item, string>(
source: NavigationTreeExpression
Value: default(IGrouping<string, Item>)
Expression: (Unhandled parameter: e),
selector: (item) => item.ParentAId))' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
at Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
...

Items 表确实使用 Table per hierarchy 和一个鉴别器列来确定项目类型。我不知道这是否是一个因素。

我看到很多人推荐 items.Select(i => i.Field).Distinct().Count() 选项,但这似乎在这里不起作用。还有其他建议吗?

谢谢!

最佳答案

目前,组内的任何类型的区别(如 GroupByElementSelector 内的 DistinctGroupBy 内的另一个 GroupBy GroupBy 的 code>ElementSelector) 不受 EF Core 支持。如果您在这种情况下坚持使用 EF,则必须在内存中获取一些数据:

var result = (await _context.Items
.Select(p => new { p.ParentAId, p.ParentBId })
.Distinct()
.ToListAsync()) // When EF supports mentioned cases above, you can remove this line!
.GroupBy(i => i.ParentBId, i => i.ParentAId)
.ToDictionary(g => g.Key, g => g.Distinct().Count());

关于c# - 带有选择非重复计数的 EF Core GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61875033/

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