Выберите объекты, где идентификатор в Массив int - Службы данных WCF, LINQ

Я хотел бы вернуть набор сущностей с идентификатором, который содержится в списке или массиве идентификаторов, используя LINQ и службы данных. Я знаю, как это сделать с помощью LinqToEF, но я затрудняюсь, как это сделать с помощью Data Services или используя соглашения о запросах OData по этому вопросу.

Я думаю, что я бы сделал что-то вроде:

int[] intArray = {321456, 321355, 218994, 189232};
var query = (from data in context.Entity
             where intArray.contains(data.ID)
             select data);

Есть ли способ выполнить используя Data Services / OData? Я знаю, что мог бы взломать его с помощью Сервисной операции, но я бы предпочел не делать этого.

Приветствия.

6
задан leppie 12 August 2014 в 08:12
поделиться

1 ответ

В настоящее время OData ( базовый протокол) не поддерживает операцию Contains. Вот почему клиентская библиотека не переводит вышеуказанный запрос. Люди в основном используют два способа преодолеть это ограничение: 1) Используйте служебные операции, как вы отметили. 2) Создайте предложение where динамически, которое использует простые сравнения для сравнения значения с каждым элементом из массива. Итак, если массив содержит 1, 2, 3, где будут данные. ID == 1 || data.ID == 2 || data.ID == 3 Решение №2 хорошее, потому что это изменение только на стороне клиента. Обратной стороной является то, что он работает только для небольших массивов. Если в массиве слишком много элементов, выражение становится слишком длинным, что приводит к разного рода неприятностям. Решение №1 не имеет проблемы с размером, но вам необходимо обеспечить операцию на сервере.

8
ответ дан 9 December 2019 в 20:38
поделиться
Другие вопросы по тегам:

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