tags:

views:

22

answers:

0

I successfully ran the following statement with the NorthWind.sdf in LinqPad:

from s in Shippers
    select new
{
    s.ShipperID,
    s.CompanyName,      
    Count=s.ShipViaOrders.Count()       
}

At the same time , I failed to run a similar statement with the Odata Service (http://services.odata.org/northwind/northwind.svc) in LinqPad:

from s in Shippers    
select new
{
    s.ShipperID,
    s.CompanyName,      
    Count=s.Orders.Count()      
}

The error is "Constructing or initializing instances of the type <>f__AnonymousType0`3[System.Int32,System.String,System.Int32] with the expression s.Orders.Count() is not supported.".

I know OData service is very limited in Linq Support. I have dynamic Linq statement support in my application. Actually I am trying to migrate the datasource from Compact SQL Server to OData service.

So I have to deal with NotSupportedException in a general way. At present, I try to check the syntax of property define before running it, such as

"s.Orders.Count() as Count"   

It passed my check, but it met NotSupportedException of OData.

Is there a way to check whether a property define (by a string or lambda) is supported by a Linq provider?

Any suggestions are appreciated.

Ying