Я боролся с тем же вопросом и понял, что правильно сформулированный вопрос - это решаемая проблема.
IQueryable в основном служит для фильтрации запроса перед отправкой его на вызов вашей БД, поэтому вместо получения 1000записей и фильтрации только 10, вы получите эти 10 для начала.Эта фильтрация принадлежит вашему сервисному уровню, но если вы создаете API, я предполагаю, что вы сопоставите его с параметрами AND / OR в своем URL.
http://{host}/{entity}/q?name=john&age=21.
Таким образом, вы получите что-то вродеthis:
Filter:Column1=Value1 > http://{host}/{entity}q?column1=value1 > SELECT *
FROM Entity
WHERE Column1=Value1
MVC > WCF > DB
Вы можете найти очень хороший пример [ здесь ]
Наконец, поскольку ваша полезная нагрузка из WCF, скорее всего, будет JSON, вы можете(и должен) затем десериализовать их в ваших Доменных Моделях внутри коллекции.Это происходит до тех пор, пока не произойдет подкачка страниц, поэтому я бы порекомендовал некоторое кэширование WCF (и, поскольку это HTTP, это действительно просто).Вы по-прежнему будете использовать LINQ на стороне WebApp, просто без предложения «WHERE» LINQ (если вы не хотите динамически создавать URL-адрес, указанный выше?)
Для сложного запроса OR вы не возражаетенесколько запросов WCF (1 на «И»), а затем объединить их все вместе