Linq 转换IQueryable<;T>;到IQueryable<;Y>;
我正在尝试这样做:我首先使用EF代码映射一个旧的现有数据库。有许多字段的类型不正确(例如:char(1)用作布尔值),因此我为我的db上下文创建了一个包装类,它可以完美地映射到数据库表。现在,我想在我的存储库中公开我的实体类型的IQueryable。参见我的示例:Linq 转换IQueryable<;T>;到IQueryable<;Y>;,linq,entity-framework,iqueryable,Linq,Entity Framework,Iqueryable,我正在尝试这样做:我首先使用EF代码映射一个旧的现有数据库。有许多字段的类型不正确(例如:char(1)用作布尔值),因此我为我的db上下文创建了一个包装类,它可以完美地映射到数据库表。现在,我想在我的存储库中公开我的实体类型的IQueryable。参见我的示例: public class MyContext:DbContext { public DbSet<WrappedEntity> WrapperEntities; } public class Repository
public class MyContext:DbContext
{
public DbSet<WrappedEntity> WrapperEntities;
}
public class Repository
{
private MyContext _context;
//contructors omitted
public IQueryable<Entity> GetEntities()
{
return _context.WrapperEntities; //doesn't compile, I need some convertion here
}
}
公共类MyContext:DbContext
{
公共DbSet包装器实体;
}
公共类存储库
{
私有MyContext_上下文;
//省略了构造函数
公共IQueryable GetEntities()
{
return _context.WrapperEntities;//未编译,这里需要一些转换
}
}
我已经有了我的转换例程,唯一缺少的是在不公开WrappedEntity类的情况下查询我的DbContext和我的存储库的方法,这可能吗?如何实现
谢谢。通常您使用
可查询项目。选择可更改查询类型
public IQueryable<Entity> GetEntities()
{
return _context.WrapperEntities.Select(x => new Entity(){...});
}
publicIQueryable GetEntities()
{
返回_context.WrapperEntities.Select(x=>newentity(){…});
}
我很困惑,您创建WrappedEntity类型是为了纠正数据库中一些不幸的原理图决策,但是您不想公开它吗?我读对了吗?没错。我想对存储库的使用者“隐藏”我数据库的真实结构。最接近我需要的,但我意识到我想要的并不是解决问题的最佳方法。谢谢你的帮助。