2009-02-18 91 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)