星期几在OData v4 Web Api中的功能

时间:2014-12-12 20:17:40

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

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

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'Third'

或类似的东西。但这一刻似乎是个梦想。有人可以说明如何做到这一点?是否必须使用这样的东西?

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

1 个答案:

答案 0 :(得分:1)

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

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

好消息是,定义在查询子句中使用的自定义未绑定函数的这种支持优先于下一个版本之后的发布。 (接下来将是12月,接下来将是2月/ 3月)。你可以使用它。