我在 LinqPad 中使用 NorthWind.sdf 成功运行了以下语句:
from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.ShipViaOrders.Count()
}
同时,我未能在 LinqPad 中使用 Odata 服务 ( http://services.odata.org/northwind/northwind.svc ) 运行类似的语句:
from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.Orders.Count()
}
错误是“不支持使用表达式 s.Orders.Count() 构造或初始化类型 <>f__AnonymousType0`3[System.Int32,System.String,System.Int32] 的实例。”。
我知道 OData 服务在 Linq 支持中非常有限。我的应用程序中有动态 Linq 语句支持。实际上,我正在尝试将数据源从 Compact SQL Server 迁移到 OData 服务。
所以我必须以一般的方式处理 NotSupportedException 。目前,我尝试在运行之前检查属性定义的语法,例如
"s.Orders.Count() as Count"
它通过了我的检查,但遇到了 OData 的 NotSupportedException。
有没有办法检查 Linq 提供程序是否支持属性定义(通过字符串或 lambda)?
任何建议表示赞赏。
英