2010-08-02 2 views
6

Я пытаюсь спросить мою службу OData:Коллекция Exists Критерии в Службы данных WCF

«Дайте мне все продукты, которые не имеют категорию»

с Продуктами и категории имеют отношения M2M ,

Я пробовал:

from p in Products 
where p.Categories == null 
select p 

и

from p in Products 
where !p.Categories.Any() 
select p 

и

from p in Products 
where p.Categories.Count == 0 
select p 

, но все они дают мне не поддерживаются исключения.


Я не ищу альтернативы или варианты. Пожалуйста, не отвечайте на другие варианты.

ответ

2

Это не поддерживается:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/b505d630-c808-4bde-b08e-3ce1dd17f621/

Язык URL запроса OData в настоящее время не поддерживает этот тип запроса. Как результат , клиентский процессор LINQ не поддерживает его. Если у вас есть , то стоит добавить такую ​​функциональность , пожалуйста, используйте наш сайт , чтобы предложить эту функцию, она делает нашей планируемой работой в следующий раз вокруг. https://connect.microsoft.com/dataplatform/content/content.aspx?ContentID=15540&wa=wsignin1.0

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

2

Мой опыт работы с службами данных WCF заключается в отсутствии клиентского подмножества LINQ для отдыха.

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

[WebGet] 
public IQueryable<Products> GetProductsWithoutCategories(){ 
    /*start psudo code 
     from p in Products 
     where p.Categories.Count == 0 
     select p 


    */ 

} 
+0

Клиент действительно не поддерживает этот тип запроса, потому что язык запросов URL не поддерживает его. Решение с сервисной операцией, как указано выше, является хорошим. –

0

Мое решение этой проблемы было $ расширить смежной области в запросе, а затем проверить, если это поле было пусто или нет ...

JArray _array = (JArray)main_table_object["some_related_field"]; 

    if (_array.Count > 0) 
     continue; 

.. это в контексте запросы с телефона Windows 7 на службу WCF с использованием JSON в качестве формата сообщения.

Смежные вопросы