Я хочу смочь использовать лямбда-выражение для определения диапазона значений для возврата по wcf сервису

Я понятия не имею, возможно ли это..., но это было бы прохладно. вопрос состоит в том, возможно ли это, но затем определенный пример, если это возможно.

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

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

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

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

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

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

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

6
задан Ian Nelson 5 March 2010 в 11:33
поделиться

4 ответа

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

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

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

7
ответ дан 10 December 2019 в 00:37
поделиться

Вы можете

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

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

2
ответ дан 10 December 2019 в 00:37
поделиться

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

1
ответ дан 10 December 2019 в 00:37
поделиться

Вы можете передать "предикат": Func, который возвращает true или false для данной группы. Поскольку вы можете передать лямбду, где ожидается Func, это может быть что-то вроде:

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

0
ответ дан 10 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

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