Создание URL-адреса запроса OData для свойств навигации и подклассов с помощью Microsoft.OData.Client

Я использую Microsoft OData Client (без генерации кода) для доступа к Dynamics CRM API, и я пытаюсь выяснить, как заставить его генерировать простые URL-адреса, подобные этому ...

https://<base URL>/EntityDefinitions(<ObjId>)/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$expand=GlobalOptionSet

Это простой запрос для получения свойства навигации от одного объекта с понижением AttributeMetadata из Attributes к PicklistAttributeMetadata, а затем развернуть в нем свойство.

С использованием Simple.OData.Client, Я могу сделать это с помощью следующего кода:

      client.For<EntityDefinition>()
    .Key(objId)
    .NavigateTo(ed => ed.Attributes)
    .As<PicklistAttributeMetadata>()
    .Expand(md => md.OptionSet);

С участием Microsoft.OData.Client, У меня битва. Лучшее, что я мог придумать, это:

      var plq = context.CreateQuery<EntityDefinition>("EntityDefinitions")
    .Where(ed => ed.MetadataId == objId)
    .AsDataServiceQuery(); // An ext method to cast back to DataServiceQuery<>;

// plq looks like https://<base URL>/EntityDefinitions(<ObjId>)
// but I can't figure out how to add /Attributes to the end without doing this:

var plq2 = context.CreateQuery<Attribute>(plq.GetPath("Attributes"), true);

// That works, but trying to cast to PicklistAttributeMetadata doesn't do anything
var plq3 = plq2.Cast<PicklistAttributeMetadata>().AsDataServiceQuery().Expand(md => md.OptionSet);

Однако приведенный выше код дает мне этот URL: https://<base URL>/EntityDefinitions(<ObjId>)/Attributes?$expand=OptionSet

То есть мне удалось заставить работать Navigation (хотя и с помощью неприятного, небезопасного по типу кода), но приведение вниз вообще не имеет никакого эффекта. Я также пробовал IQueryable.OfType<> но это не имеет значения.

Как правильно сделать эквивалент .As<> а также .Navigate()из библиотеки Simple.OData.Client в библиотеке Microsoft OData? Я действительно предпочитаю Simple.OData.Client прямо сейчас, но я хочу дать MSOData шанс, так как у него намного больше загрузок, и это пакет MS, поэтому он может иметь более длительный срок службы.

Спасибо!

0 ответов

Другие вопросы по тегам