Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Linq to Entity Query .Expand

Автор вопроса: DeepakОтветов: 1

У меня есть следующие таблицы TableA, TableB, TableC, TableD, TableE, и они имеют отношения внешнего ключа, такие как FK_AB (один ко многим), FK_BC (один к одному), FK_CD (один ко многим), FK_DE (один к одному) и имеют свойства навигации, основанные на этих внешних ключах. Теперь я хочу запросить TableA и получить записи из TableA, TableD и TableE, чей столбец Loadedby равен System. Мой запрос выглядит следующим образом

var query= from A in Context.TableA.Expand(TableB/TableC/TableD).Expand(TableB/TableC/TableD/TableE)
           where A.Loadedby=="System"
           select A;

Приведенный выше запрос работает нормально. Я хочу, чтобы записи из TableD и TableE, чье значение Loadedby было равно System, но приведенный выше запрос возвращает все записи из TableD и TableE, которые связаны с записью TableA, удовлетворяющей A.Loadedby="System", это условие не проверяется в дочерних таблицах.

Может ли кто-нибудь сказать мне, как фильтровать дочерние таблицы.

  • A.LoadedBy применяется только к TableA, что бы это значило для TableB (у которого, вероятно, даже нет свойства LoadedBy, и даже если оно есть, оно может быть другого типа и т. д.). Vitek Karas MSFT 24.02.2012
  • В TableB также есть свойство LoadedBy того же типа. Я хочу отфильтровать TableD и TableE с помощью свойства LoadedBy, и эти таблицы также имеют это свойство. Deepak 27.02.2012

entity-frameworklinqlinq-to-entitieswcf-data-services

Ответы

Ответ 1 · Vitek Karas MSFT

В настоящее время OData поддерживает фильтры только на верхнем уровне. Таким образом, в приведенном выше примере он может фильтровать только строки из TableA. Внутри расширений всегда будут включены все соответствующие строки, сейчас нет возможности отфильтровать их. Возможно, вы сможете запрашивать расширенные объекты отдельно с дополнительными запросами (с правильным фильтром) и, возможно, использовать пакет для группировки всех запросов в один запрос. Но это зависит от фактического запроса, который вам нужно отправить.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы