Iva*_*van 3 c# linq-to-entities entity-framework visual-studio
我的数据模型中有一个复杂的继承结构.我的模型中的大多数类(在VS 2010中设计,之后由其生成的DB)来自3个基本类.在上下文成员中只能找到这3个类.我如何使用所有派生类?
Cra*_*ntz 10
罗杰的答案有点作品,但可能不会给你想要的结果.通常使用起来更好OfType().要使用他的例子:
var horses = from animal in ctx.AnimalSet
where animal is Horse
select animal as Horse;
Run Code Online (Sandbox Code Playgroud)
这种horses类型IQueryable<Animal>.但在这种情况下你可能想要IQueryable<Horse>,你可以得到:
var horses = from animal in ctx.AnimalSet.OfType<Horse>()
select animal;
Run Code Online (Sandbox Code Playgroud)
... 要不就:
var horses = ctx.AnimalSet.OfType<Horse>();
Run Code Online (Sandbox Code Playgroud)
同样,Roger的第二个查询可以重写为:
var horses = from horse in ctx.AnimalSet.OfType<Horse>()
where horse.TracksWon > 3
select horse;
Run Code Online (Sandbox Code Playgroud)
哪个更容易阅读,但将结果类型更改为IQueryable<Horse>.
您可以像这样查询子类型:
var horses = from animal in ctx.AnimalSet
where animal is Horse
select animal as Horse;
Run Code Online (Sandbox Code Playgroud)
这将从我的考试上下文中的Animal集中获取所有Horse对象.
如果您希望查询子类型特定属性,您可以执行以下操作:
var horses = from animal in ctx.AnimalSet
where animal is Horse //edit, this line is not needed
let horse = animal as Horse
where horse.TracksWon > 3
select horse;
Run Code Online (Sandbox Code Playgroud)
这将全部转换为SQL,因此没有像获取所有动物和在客户端过滤的开销,它可以正常工作.
HTH