2012-12-20 20 views
2

我有以下查詢電話查詢,顯示OData的信息與阿賈克斯

[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)。

如何調用該查詢?

回答

1

試試這個:

服務(.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(); 

} 

內部創建一個接口

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

然後•操作必須是爲其成員的公共實例方法的數據服務類。

•操作方法只能接受輸入參數。數據服務無法訪問消息正文中發送的數據。

•如果定義了參數,則每個參數的類型必須是原始類型。任何非基元類型的數據都必須被序列化並傳遞給一個字符串參數。

•該方法必須返回下列之一:

  • 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> 

如果這沒有幫助嘗試以下以下quick start guide