Концептуальная модель запроса с помощью Entity SQL
Мое приложение основано на Entity Framework. Я предлагаю пользователям запрашивать определенную таблицу, сохраняя их запросы в другой таблице. Например, таблица TopQuery в базе данных хранит все запросы, которые популярны среди пользователей. Эти запросы выполняются на таблицу "TableData"
Для целей тестирования я попробовал следующее, и это работает. Единственная проблема заключается в том, что он возвращает все столбцы, где, как я хотел бы использовать столбцы, которые упоминаются пользователями в своих запросах.
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"
Я получаю исключение: указанное приведение из материализованного System.Data.Objects.MaterializedDataRecord' to'TestEntities.TableData'type недопустимо.
Я также попробовал это без какой-либо удачи.
"SELECT it.col1, it.col2 FROM TableData WHERE it.col1 = 'test'"
Что мне делать в таком случае?
С Уважением,
1 ответ
Вы никогда не получите ObjectQuery<TableData>
как только вы попытаетесь выбрать только подмножество столбцов. С помощью ObjectQuery<TableData>
работает только тогда, когда вы выбираете целую сущность, как это сделал ваш первый запрос - это строго типизированный подход, применяемый платформой Entity.
ESQL не поддерживает проекцию, как это делает Linq-to-entity (позволяя проецировать на новый анонимный или не отображенный тип). При использовании проекции с ESQL вы должны работать сObjectQuery<DbDataRecord>
,