Entity framework core EF6->;EFCore 3.1左外连接

Entity framework core EF6->;EFCore 3.1左外连接,entity-framework-core,linq-to-entities,ef-core-3.1,Entity Framework Core,Linq To Entities,Ef Core 3.1,我正在评估从EF6升级到EFCore 3.1的过程,我被简单的左外连接卡住了。我们有大量代码,如以下“ 因此,它似乎是由System.Linq和Microsoft.EntityFrameworkCore之间的名称空间冲突造成的 我补充说 public static class DbSetExtensions { public static IAsyncEnumerable<TEntity> AsAsyncEnumerable<TEntity>(this Micro

我正在评估从EF6升级到EFCore 3.1的过程,我被简单的左外连接卡住了。我们有大量代码,如以下“

因此,它似乎是由System.Linq和Microsoft.EntityFrameworkCore之间的名称空间冲突造成的

我补充说

public static class DbSetExtensions
{
    public static IAsyncEnumerable<TEntity> AsAsyncEnumerable<TEntity>(this Microsoft.EntityFrameworkCore.DbSet<TEntity> obj) where TEntity : class
    {
        return Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsyncEnumerable(obj);
    }

    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);
    }
}
公共静态类DbSetExtensions
{
公共静态IAsyncEnumerable ASASASyncEnumerable(此Microsoft.EntityFrameworkCore.DbSet obj),其中tenty:class
{
返回Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsAsAsAsyncEnumerable(obj);
}
公共静态IQueryable Where(此Microsoft.EntityFrameworkCore.DbSet obj,System.Linq.Expressions.Expression谓词),其中tenty:class
{
返回系统.Linq.Queryable.Where(obj,谓词);
}
}
根据此处的建议,发送至我的班级基础:

如果我删除此覆盖,则此操作有效:

IQueryable<SearchItemResponseDataModel> items = from item in db.Item.AsQueryable()
                                                        from e in db.Ingredient.AsQueryable().Where(a => item.ItemId == a.ItemId).DefaultIfEmpty()
                                                        select new SearchItemResponseDataModel
                                                        {
                                                            ItemId = item.ItemId,
                                                            Name = item.Name,
                                                            IsActive = item.IsActive,
                                                            Description = item.Description,
                                                            Color = e.Color
                                                        };
IQueryable items=来自db.item.AsQueryable()中的项
从db.component.AsQueryable()中的e开始,其中(a=>item.ItemId==a.ItemId).DefaultIfEmpty()
选择新的SearchItemResponseDataModel
{
ItemId=item.ItemId,
名称=项。名称,
IsActive=item.IsActive,
描述=项目。描述,
颜色
};

最好有一个覆盖,这样我就不需要到处添加.AsQueryable():(

有些问题,因为第一种模式通常有效。您测试的是什么确切的EF Core版本?您能否提供最小但完全可复制的示例?请参阅上面的更新。我的覆盖导致了问题;但是,我仍在寻找解决方案以避免此冲突。您似乎忽略了错误的重要部分r消息?
public static class DbSetExtensions
{
    public static IAsyncEnumerable<TEntity> AsAsyncEnumerable<TEntity>(this Microsoft.EntityFrameworkCore.DbSet<TEntity> obj) where TEntity : class
    {
        return Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsyncEnumerable(obj);
    }

    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);
    }
}
IQueryable<SearchItemResponseDataModel> items = from item in db.Item.AsQueryable()
                                                        from e in db.Ingredient.AsQueryable().Where(a => item.ItemId == a.ItemId).DefaultIfEmpty()
                                                        select new SearchItemResponseDataModel
                                                        {
                                                            ItemId = item.ItemId,
                                                            Name = item.Name,
                                                            IsActive = item.IsActive,
                                                            Description = item.Description,
                                                            Color = e.Color
                                                        };