Функция дня недели в OData v4 Web Api

Не похоже, что есть какая-либо встроенная функция для получения дня недели с использованием функции, основанной на документации здесь:

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 'Среда'

или что-то подобное. Но в данный момент это кажется несбыточной мечтой. Может кто-нибудь показать, как это можно сделать? Это должно быть сделано с помощью чего-то вроде этого?

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

person Richie    schedule 12.12.2014    source источник
comment
Насколько я знаю, вы правы в том, что нет таких встроенных функций, поддерживаемых DayOfWeek, и кажется, что в настоящее время вы можете сделать эту работу только путем реализации функций OData.   -  person QianLi    schedule 15.12.2014


Ответы (1)


Вы правы в том, что нет встроенных функций для получения дня недели. С точки зрения протокола определение пользовательской функции для использования в предложениях запроса должно решить проблему.

К сожалению, хотя вы можете подписаться на этот пост в блоге, чтобы определить собственный DayOfWeek как несвязанную функцию, текущая версия OData V4 веб-API поддерживает только вызов таких функций. в корне службы. Таким образом, нельзя использовать для вашего сценария.

Хорошая новость заключается в том, что такая поддержка определения пользовательских несвязанных функций, которые будут использоваться в предложениях запроса, имеет приоритет для выпуска после следующего. (следующий будет в декабре, следующий будет в феврале/марте). Вы можете использовать его тогда.

person Yi Ding - MSFT    schedule 15.12.2014
comment
Есть ли ссылка на дорожную карту OData веб-API? Просто ради любопытства? - person Richie; 15.12.2014
comment
@Richie Дорожную карту основной библиотеки можно просмотреть в системе отслеживания проблем ее репозитория Github: github.com /odata/odata.net/issues. Один для веб-API OData теперь находится здесь: aspnetwebstack.codeplex.com/workitem/list/advanced< /а>. Вы должны указать компонент как OData веб-API для просмотра. Один для ядра обновляется еженедельно. Вариант для Web API OData может быть немного более грубым. - person Yi Ding - MSFT; 17.12.2014