Я ищу полный список поддерживаемых linq дополнительных методов, которые совместимы с Услугами передачи данных WCF.
Методом проб и ошибок я нашел Первыми (Func), и Единственный (Func) не поддерживаются, никакие другие?
Это дает мне довольно хорошую идею того, что поддерживается, я просто не знаю то, что на самом деле переводится через IQueryProvider.
Эти ваши открытия действительно интересны - особенно если вы посмотрите документы MSDN Запросы к службе данных (WCF Data Services) .
В первом абзаце документы заявляют:
Запрос выполняется в следующих сценариях:
Несколькими строками ниже есть желтое поле «Примечание», в котором указано:
Примечание
Набор запросов, выражаемых в синтаксисе LINQ, шире, чем те, которые включены в синтаксис URI на основе репрезентативного состояния передачи (REST), который используется службами данных. Исключение NotSupportedException возникает, когда запрос не может быть сопоставлен с URI в целевой службе данных.
К сожалению, я не могу найти явного списка операторов в синтаксисе LINQ, которые поддерживаются или не поддерживаются WCF Data Services - вопиющий недостаток в документации!
First и Single не поддерживаются в Silverlight, потому что Silverlight требует, чтобы все сетевые соединения выполнялись асинхронно, но вы можете имитировать это с помощью такого кода
NorthwindEntities context = new NorthwindEntities(new Uri("Northwind.svc", UriKind.Relative));
DataServiceQuery<Order> q = (DataServiceQuery<Order>)context.Orders.Take(1);
q.BeginExecute((IAsyncResult ar) =>
{
var o = ((DataServiceQuery<Order>)q).EndExecute(ar).First();
txtOutput.Text = o.OrderID.ToString();
}, null);
В этом коде вы запрашиваете только одну передачу по сети с помощью Take(1), а затем, когда она уже на клиенте, используете First() или Single(), чтобы легко получить ссылку на синглтон.
Окончательного списка поддерживаемых операторов Linq, насколько мне известно, не существует.
-jeff