2

次のクエリがあります

    [WebGet]
    public IEnumerable<Table> Query1()
    {
        var Context = new ProjectEntities();
        var First = new DateTime(2012, 10, 5, 8, 0, 0, 0);
        var Last = new DateTime(2012, 11, 5, 17, 0, 0, 0);
      return 
            Context.Table.Where(
                s =>
                s.Date > First && s.Date < Last &&
                Context.Table2.FirstOrDefault(a => a.ID ==1).Table3.Contains(s.Table3)).ToList().Take(20);

    }

テーブルには 3 Foreign Keys'Table3_id'、が含まれており'Table5_id''Table6_id'ご覧のとおり、私のクエリはTableエンティティのリストを返します。

私の Ajax コール

<script type="text/javascript">
jQuery("#b7").click(function() {
    $.ajax({
        type: "GET",
        dataType: "json",
        url: "http://localhost:port/Ctx/Query1",
        success: function (data) {
            $.each(data, function (item) {
                if (item.Table5!= null) {
                    $("#t7").append("<tr>" + "<td>" + item.Table5.Title + "</td>" + "<td>" + item.Table3.Name + "</td>" + "<td>" + item.Date + "</td>" + "</tr>");
                     });

        }
    });
});

何も返さないため ( または )、私の呼び出しは間違っていますundefined

そのクエリをどのように呼び出すことができますか?

4

1 に答える 1

1

これを試して:

インターフェイスを作成する

[ServiceContract]
public interface IMyQuery
{
    [OperationContract]
    [WebGet]
    public IQueryable<Table> Query1()
}

次に、サービス内 (.svc)

[WebGet]
public IQueryable<Table> Query1()
{
  var Context = new ProjectEntities();
        var First = new DateTime(2012, 10, 5, 8, 0, 0, 0);
        var Last = new DateTime(2012, 11, 5, 17, 0, 0, 0);
      return 
            Context.Table.Where(
                s =>
                s.Date > First && s.Date < Last &&
                Context.Table2.FirstOrDefault(a => a.ID ==1).Table3.Contains(s.Table3)).Take(20).AsQueryable();

}

• 操作は、データ サービス クラスのメンバーであるパブリック インスタンス メソッドである必要があります。

• 操作メソッドは、入力パラメーターのみを受け入れる場合があります。メッセージ本文で送信されたデータは、データ サービスからアクセスできません。

• パラメータが定義されている場合、各パラメータの型はプリミティブ型である必要があります。非プリミティブ型のデータはシリアル化して、文字列パラメーターに渡す必要があります。

• メソッドは、次のいずれかを返す必要があります。

  • IEnumerable

  • IQueryable

  • データ サービスが公開するデータ モデルのエンティティ タイプ。

  • 整数や文字列などのプリミティブ クラス。

• 並べ替え、ページング、フィルタリングなどのクエリ オプションをサポートするために、サービス操作メソッドは IQueryable を返す必要があります。クエリ オプションを含むサービス操作への要求は、IEnumerable のみを返す操作では拒否されます。

• ナビゲーション プロパティを使用した関連エンティティへのアクセスをサポートするには、サービス操作が IQueryable を返す必要があります。

• メソッドには、[WebGet] または [WebInvoke] 属性で注釈を付ける必要があります。

  • [WebGet] を使用すると、GET リクエストを使用してメソッドを呼び出すことができます。

  • [WebInvoke(Method = "POST")] は、POST 要求を使用してメソッドを呼び出すことができるようにします。他の

WebInvokeAttribute メソッドはサポートされていません。

あなたのJavaScriptの中で

<script type="text/javascript">
jQuery("#b7").click(function() {
    $.ajax({
        type: "GET",
        dataType: "json",
        url: "http://localhost/your service.svc/Query1?$format=json",
        success: function (data) {
            $.each(data.d, function (i) {
                if (data.d[i] != null) {
                ...
                }
            });
        }
    });
});
</script>

これで問題が解決しない場合は、次のクイック スタート ガイドに従ってみてください

于 2013-03-19T02:35:01.510 に答える