Ho eseguito correttamente la seguente dichiarazione con la Northwind.sdf in LINQPad:Esiste un metodo generale per verificare se una proprietà definita è supportata da un provider Linq, in particolare OData?
from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.ShipViaOrders.Count()
}
Allo stesso tempo, non sono riuscito ad eseguire un'istruzione simile con il Servizio odata (http://services.odata.org/northwind/northwind.svc) in LINQPad:
from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.Orders.Count()
}
L'errore è "Costruire o inizializzare istanze del tipo <> f__AnonymousType0`3 [System.Int32, System.String, System.Int32] con l'espressione s.Orders.Count() non è supportato.".
So che il servizio OData è molto limitato nel supporto Linq. Ho un supporto di istruzioni Linq dinamico nella mia applicazione. In realtà sto cercando di migrare l'origine dati da Compact SQL Server al servizio OData.
Quindi mi devo occupare di NotSupportedException in generale. Allo stato attuale, cerco di controllare la sintassi della proprietà definiscono prima di eseguirlo, come ad esempio
"s.Orders.Count() as Count"
Passò il mio assegno, ma ha soddisfatto NotSupportedException di OData.
C'è un modo per verificare se una proprietà definisce (tramite una stringa o lambda) è supportata da un provider Linq?
Qualsiasi suggerimento è gradito.
Ying
@Ying: Questo suona come * la * risposta a me. Se è così, puoi accettarlo. – chiccodoro