2016-04-06 10 views
0

webgetパラメータでエンティティデータベーステーブルを選択することができるかどうか尋ねたがっていますか?ここにそれはどのように見えるのですか:WCFサービス(エンティティ)¨linqquert dbテーブルからパラメータ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; 



    } 

これはうまくいかないのですが、これをやり遂げる方法はありますか? 誰かが私を助けることを願っています:)

答えて

0

これは不可能です。 IQueryable<T>をシリアル化することはできません。したがって、WCFを送信することはできません。

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

あなたがハードコアの場合は、serializing funcに関するこのディスカッションをご覧ください。

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

return Callers.ToArray(); 

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

--Edit--

申し訳ありませんが、私は、ワイヤ上のIQueryableを送信することが不可能およそば完全に間違っていました。私はここでODataサービスについて話していることを完全に忘れていました。私はいつもSOAPサービスについて考えていました。それをクリアするためのRytmisに感謝します。 でグーグルすると、の検索語句も表示されます。Expose IQueryable Over WCF Service

+0

申し訳ありませんが間違って入力しましたが、パラメータを使用してデータベースからテーブルを選択できますか? –

+0

リフレクションを使用して名前からテーブルタイプを取得し、このタイプを 'dbContext.Set ()'で使用できます。ただし、WCFを通じて汎用タイプを返すことはできません。ただし、共通データを含むテーブルの基本型をいくつか導入し、この基本型を返すことができます。 –

+0

いいえ、不可能ではありません。 WCF Data Servicesは、IQueryableをODataクエリにマップします。 https://msdn.microsoft.com/en-us/library/dd744841(v=vs.110).aspxを参照してください。 – Rytmis

関連する問題