0

私のアプリケーションは 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 から 'TestEntities.TableData' 型への指定されたキャストは無効です。

私も運なしでこれを試しました。

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

このような場合はどうすればよいですか?

よろしく、

4

1 に答える 1

0

ObjectQuery<TableData>列のサブセットのみを選択しようとすると、取得できません。使用ObjectQuery<TableData>は、最初のクエリのようにエンティティ全体を選択した場合にのみ機能します。これは、エンティティ フレームワークによって強制される厳密に型指定されたアプローチです。

ESQL は、Linq-to-entities が行う方法での射影をサポートしていません (新しい匿名型またはマップされていない型への射影を許可することによって)。ESQL でObjectQuery<DbDataRecord>プロジェクションを使用する場合は、 を使用する必要があります。

于 2012-07-02T12:06:10.650 に答える