Концептуальная модель запроса с помощью 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>,

Другие вопросы по тегам