2010-08-02 8 views
6

sto cercando di chiedere al mio servizio OData:Collection esiste Criteri di WCF Data Services

"Dammi tutti i prodotti che non hanno una categoria"

con i prodotti e categoria avere un rapporto m2m .

ho provato:

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

e

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

e

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

ma tutti questi mi danno eccezioni non supportati.


Non sto cercando alternative o opzioni. Per favore non rispondere con altre opzioni.

risposta

2

Questo non è supportato:

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

Il linguaggio di query URL OData attualmente non supporta questo tipo di query. Come un risultato il processore LINQ del client non lo supporta neanche. Se si è di aggiungere una tale funzionalità si prega di utilizzare il nostro sito di collegamento per suggerire la funzione, rende il nostro lavoro di pianificazione più facile la prossima volta in giro. https://connect.microsoft.com/dataplatform/content/content.aspx?ContentID=15540&wa=wsignin1.0

Come soluzione alternativa, è possibile utilizzare l'operazione di servizio . Definire un servizio operazione che restituisce IQueryable (quindi è possibile comporre altri interrogativi di query sul risultato dal client e utilizzare il provider lato server per eseguire la query sopra riportata.

2

La mia esperienza con WCF Data Services è che manca il sottoinsieme client di LINQ per il resto.

La mia opzione di parzialità sarebbe semplicemente spostarla sul lato server dove si ha accesso alla piena implementazione di LINQ alle entrate? (o qualsiasi altra cosa tu usi per implementare il tuo servizio dati).

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


    */ 

} 
+0

Il client in effetti non supporta questo tipo di query, poiché il linguaggio di query URL non lo supporta. La soluzione con un'operazione di servizio, come postata sopra, è comunque buona. –

0

La mia soluzione a questo problema è stato quello di $ espandere il campo correlato nella query, e quindi verificare se quel campo era vuoto o no ...

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

    if (_array.Count > 0) 
     continue; 

.. questo è nel contesto di query dal telefono Windows 7 a un servizio WCF che utilizza JSON come formato del messaggio.

Problemi correlati