linq to entities继承查询问题

4

我试图在使用“按类型分表”(Table per Type)的表上执行linq to entities查询。

我的问题是,我无法访问继承表上的属性,只能访问基本表上的属性。

var qry = from i in _DB.BaseTable
where i is catalogueModel.InheritedTable
// Field Doesn't Exist
// && i.InheritedTableField == "Value"
select i;

当我尝试将继承表转换为其类型时...

var qry = from i in _DB.BaseTable
where i is catalogueModel.InheritedTable
&& (i as catalogueModel.InheritedTable).InheritedTableField  == "Value"
select i;

...代码编译通过,但出现了一个酷炫的错误信息:

工作表中只允许使用文本指针,不允许使用文本、ntext 或 image 列。查询处理器生成了一个需要在工作表中使用文本、ntext 或 image 列的查询计划。

我想问的是,在使用 Table per Type 时,如何访问继承表的属性?

2个回答

8

使用OfType():

var qry = from i in _DB.BaseTable.OfType<InheritedTable>()
          select i.InheritedTableField;

Graig先生,向您致以敬意。看起来您已经解决了我的问题。非常感谢您。顺便问一下 - 您知道在使用继承时,有哪些关于Linq到实体查询的好参考资料吗? - CraftyFella

0

你也可以使用 IS

var qry = from i in _DB.BaseTable where i is InheritedTable select i.InheritedTableField; 

以下是一些其他的帮助(使用实体 SQL)

var q = SELECT VALUE c FROM OFTYPE(yourcontext.yourbaseclass, yourmodel.yoursubclass) AS c

var q = SELECT VALUE c FROM yourcontext.yourbaseclass AS c where c IS NOT OF (yourmodel.yoursubclass)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接