Критерии существования коллекции в службах данных WCF - PullRequest
6 голосов
/ 02 августа 2010

Я пытаюсь задать свой сервис OData:

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

с продуктами и категориями имеют отношение 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

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


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

Ответы [ 3 ]

2 голосов
/ 04 августа 2010

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

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 голосов
/ 02 августа 2010

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

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

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


    */

 }
0 голосов
/ 25 августа 2011

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

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

   if (_array.Count > 0) 
      continue; 

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

...