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实体列表。

我的阿贾克斯电话

<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。对于仅返回 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 回答