0

webget パラメーターを介してエンティティ データベース テーブルを選択できるかどうかを尋ねたかったのですか? これは次のようになります。

[WebGet]
    public IQueryable<TestTable> GetAllCallers(string select, string **table**)
    {

        //testCDREntities context = this.CurrentDataSource;

            var Callers = from d in this.CurrentDataSource.**table**
                          select d ;

        return Callers;



    }

もちろんこれは機能しませんが、これを機能させる方法はありますか? 誰かがこれで私を助けてくれることを願っています:)

4

1 に答える 1

0

不可能だよ。シリアル化IQueryable<T>できないため、WCF 経由で送信することはできません。

通常の方法は、必要なプロパティをシリアライズ可能なデータ転送オブジェクトにパックすることです。Automapperを使用して、ドメイン エンティティを DTO にマップしています。

筋金入りの場合は、func のシリアル化に関するこのディスカッションをご覧ください。

ただし、シリアル化することは可能TestTable[]です。TestTable は、インスタンス化できる既知のクラスである必要があります (つまり、抽象でもインターフェースでもない)。また、datacontractで使用されるすべてのプロパティはシリアライズ可能でなければなりません。

return Callers.ToArray();

.ToArray()クエリを実行するため、抽象的な構文ツリーではなく、実際のデータを送信しています。

- 編集 -

申し訳ありませんが、ネットワーク経由で IQueryable を送信できないという点について、私は完全に間違っていました。ここで OData サービスについて話していることを完全に見逃していました。私はずっとSOAPサービスのことを考えていました。それを解決してくれたRytmisに感謝します。正しい検索語句でグーグル検索すると、次のディスカッションも見つかりました。 WCF サービスで IQueryable を公開する

于 2016-04-06T19:10:05.083 に答える