Use LINQ for double-nested OData collection

泄露秘密 提交于 2019-12-24 07:06:55

问题


I've got a custom OData feed that for books. Each book can have multiple authors and an author can be involved in multiple books so I implemented this using a join table (Book - BookAuthorJoin - Author). My proxy object has Book.BookAuthorJoins BookAuthorJoin.Books & BookAuthorJoin.Authors.

What I want todo is have a single query where I get all the books for an author in a single LINQ query, but having trouble applying the filter. Seems I want two Expand() methods, but that isn't working. The following query doesn't work, but shows what I'm trying to do:

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

回答1:


On the server side, the 1-to-many or many-to-many relationship is usually exposed as just a navigation property, exposing the join table in the middle will make your life much harder. If you use EF you should be able to hide the table and just expose the relationship as a navigation property. In any case, to get all books for a certain author the query should look like:

/Authors(123)/Books

The result of this query is just a feed of books.

If you do keep the join table exposed then something like this migth work:

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

But this time you get all the BookAuthorJoins with the Book for each as well.



来源:https://stackoverflow.com/questions/4441665/use-linq-for-double-nested-odata-collection

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!