2012-07-02 1 views
0

Мое приложение основано на Entity Framework. Я предлагаю пользователям запрашивать конкретную таблицу, сохраняя свои запросы в другой таблице. Например, таблица TopQuery в базе данных хранит все запросы, которые популярны среди пользователей. Эти запросы выполняются в таблице «Таблица данных»Концептуальная модель запроса с Entity SQL

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

string queryString = 
     @"SELECT VALUE table FROM TestEntities.TableData AS table where table.col1 = 'test'"; 

    ObjectQuery<TableData> productQuery2 = 
     new ObjectQuery<TableData>(queryString, context); 

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

SELECT table.col1, table.col2, table.col3 FROM TestEntities.TableData AS table where table.col1 = "test" 

я получаю исключение: Указанный литая из материализованного to'TestEntities.TableData'type System.Data.Objects.MaterializedDataRecord»не является допустимым.

Я также пробовал это без везения.

"SELECT it.col1, it.col2 FROM TableData WHERE it.col1 = 'test'" 

Что делать в этом случае?

С уважением,

ответ

0

Вы никогда не получите ObjectQuery<TableData> когда вы пытаетесь выбрать только подмножество столбцов. Использование ObjectQuery<TableData> работает только при выборе всего объекта по вашему первому запросу - это строго типизированный подход, применяемый инфраструктурой Entity.

ESQL не поддерживает проекцию в способе Linq-to-entity (разрешая вам проецировать новый анонимный или не отображаемый тип). При использовании проекции with ESQL you must work with ObjectQuery<DbDataRecord>.