Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Collection Exists Criteria in WCF Data Services

I'm trying to ask my OData service:

"Give me all the Products that do not have a Category"

with the Products and Category have a m2m relationship.

I've tried:

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

and

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

and

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

but all of these give me not supported exceptions.


I'm not looking for alternatives or options. Please don't answer with other options.

like image 375
John Farrell Avatar asked Aug 02 '10 18:08

John Farrell


2 Answers

My experience with WCF Data Services is that the client subset of LINQ to rest is lacking.

My biased option would be to just move it to server side where you have access to the full implementation of LINQ to entites? (or whatever you are using to implement your Data Service).

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


    */

 }
like image 171
Nix Avatar answered Nov 15 '22 07:11

Nix


This is not supported:

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

The OData URL query language currently doesn't support this type of query. As a result the client's LINQ processor doesn't support it either. If you think it's valuable to add such functionality please use our connect site to suggest the feature, it makes our planning job easier next time around. https://connect.microsoft.com/dataplatform/content/content.aspx?ContentID=15540&wa=wsignin1.0

As a workaround you could probably use service operation. Define a service operation which returns IQueryable (so that you can compose some more query operators on the result from the client) and use the server side provider to issues the query above.

like image 45
John Farrell Avatar answered Nov 15 '22 09:11

John Farrell