C# .NET/EF:如何绕过';歧义问题';使用分组依据创建查询?

C# .NET/EF:如何绕过';歧义问题';使用分组依据创建查询?,c#,.net-core,ef-core-6-preview,C#,.net Core,Ef Core 6 Preview,我正在使用最新版本的.NET Core(.NET 5)和Entity Framework Core 6(预览版)连接到MySQL数据库。我正试图使用GroupBy生成一个分组查询,以便在DB服务器上执行,如下所述。不幸的是,这无法编译,并出现错误 以下方法或属性之间的调用不明确:“System.Linq.Queryable.GroupBy(System.Linq.IQueryable,System.Linq.Expressions.Expression)”和“System.Linq.AsyncE

我正在使用最新版本的.NET Core(.NET 5)和Entity Framework Core 6(预览版)连接到MySQL数据库。我正试图使用GroupBy生成一个分组查询,以便在DB服务器上执行,如下所述。不幸的是,这无法编译,并出现错误

以下方法或属性之间的调用不明确:“System.Linq.Queryable.GroupBy(System.Linq.IQueryable,System.Linq.Expressions.Expression)”和“System.Linq.AsyncEnumerable.GroupBy(System.Collections.Generic.IAsyncEnumerable,System.Func)”

这一错误与LINQ和EF内核共享相同的方法有关,对此进行了详细讨论。我尝试了为每个LINQ调用创建扩展方法的建议解决方案,代码如下:

    {
        public static IQueryable<TEntity> Where<TEntity>(this Microsoft.EntityFrameworkCore.DbSet<TEntity> obj, System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate) where TEntity : class
        {
            return System.Linq.Queryable.Where(obj, predicate);
        }

        public static IQueryable<TResult> GroupBy<TSource, TKey, TElement, TResult>(
            this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, Expression<Func<TSource, TElement>> elementSelector, Expression<Func<TKey, IEnumerable<TElement>, TResult>> resultSelector)
        {
            return System.Linq.Queryable.GroupBy(source, keySelector, elementSelector, resultSelector);
        }

        public static IQueryable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector)
        {
            return System.Linq.Queryable.GroupBy(source, keySelector);
        }

    }
{
公共静态IQueryable Where(此Microsoft.EntityFrameworkCore.DbSet obj,System.Linq.Expressions.Expression谓词),其中tenty:class
{
返回系统.Linq.Queryable.Where(obj,谓词);
}
公共静态IQueryable GroupBy(
此IQueryable源、表达式键选择器、表达式元素选择器、表达式结果选择器)
{
返回系统.Linq.Queryable.GroupBy(源、键选择器、元素选择器、结果选择器);
}
公共静态IQueryable GroupBy(此IQueryable源、表达式键选择器)
{
返回系统.Linq.Queryable.GroupBy(source,keySelector);
}
}
这修复了“Where()”的问题,但是GroupBy()的错误仍然存在。我应该使用不同的扩展方法来解决此问题,还是使用其他解决方法?我不能使用AsEnumerable(),因为这会在执行分组之前检索所有记录。

当不需要
IAsyncEnumerable
时,在
DbSet
上使用
.AsQueryable()
,反之亦然,以消除歧义:

dbContext.YourEntities
    .AsQueryable() // or .AsAsyncEnumerable()
    // ...
    .GroupBy(ye => ye.PropertyA);

谢谢,.AsQueryable()和.asAsAsAsyncEnumerable()解决了这个问题。尽管我读过这篇文章后尝试运行EFCore6的预览版,但不幸的是它仍然存在。希望在全面发布之前能够解决这个问题。对不起,我运行的是EF core版本6.0.0-preview.2.21154.2,试图绕过这个问题,但我错误地将这个问题标记为标准EF 6。为此添加了相应的(新)标记