Linq to Entity Query .Expand

У меня есть следующие таблицы 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", это условие не проверяется в дочерних таблицах.

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


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


Ответы (1)


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

person Vitek Karas MSFT    schedule 28.02.2012
comment
Спасибо за ответ. Основываясь на результате первого запроса (строки родительских сущностей), мы будем запрашивать дочерние таблицы. Итак, в этом случае мы можем использовать пакетный - person Deepak; 29.02.2012
comment
Если комментарий был вопросом: если вам нужен результат первого запроса, чтобы выдать второй запрос, вы не можете использовать пакет. - person Vitek Karas MSFT; 29.02.2012