C# 如何铸造IQueryable<;T>;至DbSet<;T>;? 公共数据库集项目 { 得到 { 返回dbContext.Item.Where(x=>x.Id==Id)。选择(x=>x) } }

C# 如何铸造IQueryable<;T>;至DbSet<;T>;? 公共数据库集项目 { 得到 { 返回dbContext.Item.Where(x=>x.Id==Id)。选择(x=>x) } },c#,entity-framework,linq,C#,Entity Framework,Linq,上述代码导致编译错误: 无法将类型“System.Linq.IQueryable”隐式转换为。。。DbSet. 存在显式转换(是否缺少强制转换?) 添加显式强制转换后: public DbSet<Item> Items { get { return dbContext.Item.Where(x => x.Id == id).Select(x=>x) } } 公共数据库集项目 { 得到 { return(DbSet)(d

上述代码导致编译错误:

无法将类型“System.Linq.IQueryable”隐式转换为。。。DbSet.
存在显式转换(是否缺少强制转换?)

添加显式强制转换后:

public DbSet<Item> Items 
{ 
    get 
    { 
        return dbContext.Item.Where(x => x.Id == id).Select(x=>x)
    }
} 
公共数据库集项目
{
得到
{ 
return(DbSet)(dbContext.Item.Where(x=>x.Id==Id)。选择(x=>x))
}
} 
发生运行时错误:

其他信息:无法将类型为“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable”1[Item]”的对象强制转换为类型为“Microsoft.EntityFrameworkCore.DbSet”1[Item]”的对象


有什么想法吗?

查询的结果根本不是
DbSet
。为什么不将您的属性返回类型更改为
IQueryable
?(当你在做的时候,移除
。选择(x=>x)
-它没有为你做任何事情。)不能将某个东西转换成类型x通常是某个东西不是该类型x的标志。当运行时告诉你它不能这样做时,你为什么不相信它呢?好的,谢谢你的回答。@戳出消息“存在显式转换”充其量是令人困惑的。它自然会导致尝试进行显式转换。然后失败,并显示更清晰的错误消息。
public DbSet<Item> Items 
{
     get 
     { 
         return (DbSet<Item>)(dbContext.Item.Where(x => x.Id == id).Select(x => x))
     }
}