Я успешно выполнил следующую инструкцию с NorthWind.sdf в LinqPad:
from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.ShipViaOrders.Count()
}
В то же время мне не удалось выполнить аналогичный оператор со службой Odata (http://services.odata.org/northwind/northwind.svc) в LinqPad:
from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.Orders.Count()
}
Ошибка: «Создание или инициализация экземпляров типа ‹>f__AnonymousType0`3[System.Int32,System.String,System.Int32] с выражением s.Orders.Count() не поддерживается».
Я знаю, что служба OData очень ограничена в поддержке Linq. В моем приложении есть поддержка динамических операторов Linq. На самом деле я пытаюсь перенести источник данных с Compact SQL Server на службу OData.
Поэтому мне приходится иметь дело с NotSupportedException в общем виде. В настоящее время я пытаюсь проверить синтаксис определения свойства перед его запуском, например
"s.Orders.Count() as Count"
Он прошел мою проверку, но встретил исключение NotSupportedException для OData.
Есть ли способ проверить, поддерживается ли определение свойства (строкой или лямбда) поставщиком Linq?
Любые предложения приветствуются.
Ин