У меня проблемы с фильтрацией / объединением списков объектов в памяти с Linq для объектов, и для того, что обычно было бы тривиальным запросом SQL ...
Сценарий:
Наличие службы json (.asmx) позволяет клиенту выполнять вызов БД через оболочку sproc Entity Framework (функция импорта). В этом случае [веб-метод] «GetArticles (int [] TagIds)»
Сейчас я пытаюсь кэшировать эти данные, чтобы сэкономить на вызовах БД и применить фильтры к кешированной коллекции.
Данные:
- Многие ко многим отношения с 2 сущностями: статьи, теги
- Статьи могут иметь много тегов, и теги могут быть связаны со многими статьями (так что дополнительная таблица ссылок 'ArticlesTags')
Параметр фильтра веб-службы будет содержать массив тегов, которые могут иметь возвращаемые статьи.
Так что мой базовый SQL-запрос будет выглядеть так
SELECT DISTINCT a.*
FROM Article a INNER JOIN ArticlesTags at ON a.ArticleId = at.ArticleId
WHERE at.TagId in (0, 1.. 'list of tag ids')
Я попадаю в ряд загадок -
EF-обернутые sprocs не допускают SQL 2008 (параметры табличных значений), поэтому я не могу передать фильтр списка тегов в предпочтительном формате.
Я нашел пример, где два набора результатов могут быть возвращены из одного вызова sproc, который может обойти это.
Итак, когда у меня есть две коллекции (Articles и ArticlesTags), которые я намереваюсь кэшировать, как их объединить и затем отфильтровать на основе возможного параметра фильтра TagId с linq-to-objects?