我试图获取数据库中所有拥有重复所有者的项目。我的第一个方法返回它们的计数,并且没有任何问题:
public int GetUsersWithMultipleItemsCount()
{
return GetItemsSecureAsync().Result
.Where(item => item.OwnerId != null)
.GroupBy(item => item.OwnerId)
.Count(grouping => grouping.Count() > 1);
}
但实际获取它们列表的方法无法翻译:
public IEnumerable<IGrouping<Guid?, ItemType>> GetItemsWithDuplicateOwners()
{
return GetItemsSecureAsync().Result
.Where(item => item.OwnerId != null)
.GroupBy(item => item.OwnerId)
.Where(grouping => grouping.Count() > 1)
.ToList();
}
我怎样才能修改它,而不需要客户端评估?我宁愿不放慢我的应用程序,因为这样的微不足道的功能。
编辑:我认为解决方案有效,但现在它再次失败,尽管SelectMany子句。我为此创建了一个小的扩展函数:
public static IQueryable<T> NonDistinct<T, TKey>(this IQueryable<T> source, Expression<Func<T, TKey>> keySelector)
{
return source.GroupBy(keySelector).Where(g => g.Count() > 1).SelectMany(r => r);
}
EF Core7似乎存在与此相关的问题:https://github.com/dotnet/efcore/issues/28002
1条答案
按热度按时间5sxhfpxr1#
失败的原因是
ToList()
先使用
SelectMany()