Линк к проблеме запроса наследования объектов - PullRequest
4 голосов
/ 18 февраля 2009

Я пытаюсь выполнить запрос linq to entity для таблицы, которая унаследована с использованием Таблица для Типа .

Проблема, с которой я столкнулся, заключается в том, что я не могу получить в свойствах унаследованной таблицы только свойства базовой таблицы.

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 или столбец изображения в работе таблица.

Полагаю, мой вопрос: как вы должны получить доступ к свойствам унаследованных таблиц в linq для сущностей при использовании Таблица для типа ?

Ответы [ 2 ]

8 голосов
/ 18 февраля 2009

Использование. OfType ():

var qry = from i in _DB.BaseTable.OfType<InheritedTable>()
          select i.InheritedTableField;
0 голосов
/ 08 ноября 2010

Вы также можете использовать IS

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

Вот несколько других, которые могут помочь (используя Entity 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)
...