Поддерживаемые Linq для служб данных WCF - PullRequest
5 голосов
/ 05 мая 2010

Я ищу полный список поддерживаемых методов расширения linq, совместимых с WCF Data Services.

Методом проб и ошибок я обнаружил, что First (Func) и Single (Func) не поддерживаются, другие?

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

Ответы [ 3 ]

6 голосов
/ 23 декабря 2010

Я нашел сайт со списком неподдерживаемых методов linq

http://msdn.microsoft.com/en-us/library/ee622463.aspx#unsupportedMethods

2 голосов
/ 06 мая 2010

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, о которых я знаю.

-Джефф

1 голос
/ 05 мая 2010

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

В первом абзаце состояние документа:


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

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

Через несколько строк внизу есть желтое поле с пометкой:

Примечание

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

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

...