Используйте LINQ для двойной коллекции OData - PullRequest
1 голос
/ 14 декабря 2010

У меня есть специальный канал OData для книг. В каждой книге может быть несколько авторов, и автор может участвовать в нескольких книгах, поэтому я реализовал это с помощью таблицы соединений (Book - BookAuthorJoin - Author). Мой прокси-объект имеет Book.BookAuthorJoins BookAuthorJoin.Books & BookAuthorJoin.Authors.

То, что я хочу сделать, это иметь один запрос, в котором я получаю все книги для автора в одном запросе LINQ, но возникают проблемы с применением фильтра. Кажется, я хочу два метода Expand (), но это не работает. Следующий запрос не работает, но показывает, что я пытаюсь сделать:

var query = from book in ODataContext.Books.Expand("BookAuthorJoins").Expand("Authors")
            where book.BookAuthorJoins.Author.AuthorID = authorID
            select book;

1 Ответ

2 голосов
/ 15 декабря 2010

На стороне сервера отношение 1-ко-многим или многие-ко-многим обычно отображается как просто свойство навигации, а раскрытие таблицы соединений в середине сделает вашу жизнь намного сложнее.Если вы используете EF, вы сможете скрыть таблицу и просто представить связь как свойство навигации.В любом случае, чтобы получить все книги для определенного автора, запрос должен выглядеть следующим образом:

/Authors(123)/Books

Результатом этого запроса является просто поток книг.

Если вы сохранитеприсоединиться к столу, затем что-то вроде этой работы:

/Authors(123)/BookAuthorJoins?$expand=Book

Но на этот раз вы получите все BookAuthorJoins вместе с Книгой для каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...