Я хочу иметь возможность использовать лямбда-выражение, чтобы указать диапазон значений для возврата через службу wcf - PullRequest
6 голосов
/ 05 марта 2010

Понятия не имею, возможно ли это ... но было бы круто. вопрос в том, возможно ли это, но тогда немного примеров, если это возможно.

Я не уверен, какую сигнатуру метода вы бы использовали для передачи лямбда-выражения.

Например, метод IList<Group> GetGroups()

Как бы вы изменили это, чтобы иметь возможность передавать в него лямбда-выражение?

Следующий вопрос: как бы вы закодировали лямбда-выражение для возврата всех объектов группы, где, например,

  • where .deleted == false или
  • where .DateAdded > aDate

Да, я хочу луну на палке;) Заранее спасибо.

(edit Я думаю, что это немного непонятно на самом деле из-за уровня доступа к данным, который на самом деле извлекает данные ... но предположим, что вы запрашиваете некоторую коллекцию объектов через службу и не должны беспокоиться о дал).

Ответы [ 4 ]

7 голосов
/ 05 марта 2010

Вы можете объявить метод GetGroups с параметром типа Expression<Func<Group, bool>>, который представляет предикат, которому должна соответствовать группа, чтобы быть возвращенной:

IList<Group> GetGroups(Expression<Func<Group, bool>> predicateExpression);

Проблема в том, что выражения нельзя сериализовать, поэтому вы не можете отправить их в службу WCF ... Однако вы можете найти способ сделать это с проектом Сериализация дерева выражений .

2 голосов
/ 05 марта 2010

Вы могли бы

  • определяет простой язык запросов, который понимает ваша серверная служба
  • веб-сервис предоставляет метод, который принимает строку на этом языке запросов
  • написать систему преобразования на стороне клиента, которая принимает IQueryable, полный деревьев выражений, и переводит его на язык запросов
  • теперь клиент может либо писать запросы на вашем языке запросов напрямую, либо может писать запросы LINQ, которые ваш переводчик превращает в ваш язык запросов
  • эй, ты просто изобрел LINQ-To-Turtoise! ​​

Мэтт Уоррен имеет семнадцать статей в блоге о том, как делать подобные вещи.

1 голос
/ 05 марта 2010

Я думаю, что службы RIA делают то, что вы хотите, но я не знаю магию этого.

0 голосов
/ 05 марта 2010

Вы можете передать «предикат»: A Func<Group, bool>, который возвращает истину или ложь для данной группы.Поскольку вы можете передать лямбду, где ожидается Func, это может быть что-то вроде:

var fooGroups = GetGroups(g => g.Name.StartsWith("Foo"));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...