【问题标题】:Day of week Function in OData v4 Web ApiOData v4 Web Api 中的星期几函数
【发布时间】:2015-02-11 15:02:15
【问题描述】:

看起来没有任何内置函数可以使用基于此处文档的函数来获取星期几:

http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html

我想要的是一个 Web Api 2.2 OData V4 实现,它可以为这样的 url 请求提供服务:

/meeting?$filter=dayofweek(StartDate) eq 'Wednesday'

或类似的东西。但此刻,这似乎是一场白日梦。有人可以展示如何做到这一点吗?是否必须使用类似的东西来完成?

  builder.EntityType<Meeting>().Collection
            .Function("DayOfWeek")
            .Returns<IEnumerable<Meeting>>();

然后

using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.OData;

namespace Test.Controllers
{
    public class MeetingsController : ODataController
    {
        private EntityContext db = new EntityContext();

        [EnableQuery]
        public IQueryable<Meeting> GetMeetings()
        {
            return db.Meetings;
        }

        [HttpGet]
        public IHttpActionResult DayOfWeek(DateTime dayofweek)
        {
            //calculate day of week and return string
         }
    }
}

【问题讨论】:

  • 据我所知,您是正确的,没有支持 DayOfWeek 的此类内置函数,并且目前您似乎只能通过实现 OData 函数来完成这项工作。

标签: c# asp.net-web-api odata asp.net-web-api-odata


【解决方案1】:

您是正确的,没有用于获取星期几的内置函数。从协议的角度来看,定义要在查询子句中使用的自定义函数应该可以解决问题。

很遗憾,虽然您可以按照this blog post 将自己的 DayOfWeek 定义为未绑定函数,但当前版本的 Web API OData V4 仅支持在服务根目录调用此类函数。因此不能用于您的场景。

好消息是,这种对定义用于查询子句的自定义未绑定函数的支持优先用于下一个发布。 (下一个将在 12 月,下一个将在 2 月/3 月)。那你就可以用了。

【讨论】:

  • 是否有指向 Web API OData 路线图的链接?只是为了好奇?
  • @Richie 核心库路线图可以从其 Github repo 的问题跟踪器中查看:github.com/odata/odata.net/issues。 Web API OData 现在位于此处:aspnetwebstack.codeplex.com/workitem/list/advanced。您应该将组件指定为要查看的 Web API OData。核心版每周更新一次。用于 Web API OData 的可能更粗糙一些。
猜你喜欢
  • 2014-10-08
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
相关资源
最近更新 更多