2009-02-18 96 views
4

我正试图执行一个LINQ实体查询在继承使用Table per Type继承的表上。LINQ to实体继承查询问题

我遇到的问题是我无法获取Inhertied表中的属性只有基表上的属性。

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或图像 列。查询处理器在工作 表中生成了需要文本, ntext或图像列的查询计划 。

我想我的问题是你如何使用应该当Table per Type访问的LINQ to实体继承表的属性?

回答

8

使用。 OfType():

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

克雷格,帽子给你的提示先生。看来你已经解决了我的问题。 Much'o Thanks'o。 顺便说一句 - 知道使用继承时Linq对实体查询的任何好的参考? – CraftyFella 2009-02-19 10:51:24

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)