Поддерживаемый Linq для услуг передачи данных WCF

Я ищу полный список поддерживаемых linq дополнительных методов, которые совместимы с Услугами передачи данных WCF.

Методом проб и ошибок я нашел Первыми (Func), и Единственный (Func) не поддерживаются, никакие другие?

Это дает мне довольно хорошую идею того, что поддерживается, я просто не знаю то, что на самом деле переводится через IQueryProvider.

5
задан John Farrell 7 May 2010 в 20:11
поделиться

2 ответа

Эти ваши открытия действительно интересны - особенно если вы посмотрите документы MSDN Запросы к службе данных (WCF Data Services) .

В первом абзаце документы заявляют:


Запрос выполняется в следующих сценариях:

  • Когда результаты перечисляются неявно, например:
    • Когда свойство в DataServiceContext, которое представляет и перечисляется набор сущностей, например, во время цикла foreach (C #) или For Each (Visual Basic).
    • Когда запрос назначается коллекции List.
    • Когда явно вызывается метод Execute или BeginExecute.
    • Когда вызывается оператор выполнения запроса LINQ, например First или Single .

Несколькими строками ниже есть желтое поле «Примечание», в котором указано:

Примечание

Набор запросов, выражаемых в синтаксисе LINQ, шире, чем те, которые включены в синтаксис URI на основе репрезентативного состояния передачи (REST), который используется службами данных. Исключение NotSupportedException возникает, когда запрос не может быть сопоставлен с URI в целевой службе данных.

К сожалению, я не могу найти явного списка операторов в синтаксисе LINQ, которые поддерживаются или не поддерживаются WCF Data Services - вопиющий недостаток в документации!

1
ответ дан 14 December 2019 в 01:03
поделиться

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

2
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: