我有一个定制的OData Feed供书籍使用。每本书可以有多个作者,作者可以参与多本书,所以我使用连接表(Book - BookAuthorJoin - Author)实现了这一点。我的代理对象有Book.BookAuthorJoins BookAuthorJoin.Books& BookAuthorJoin.Authors。
我想要的是todo只有一个查询,我在单个LINQ查询中获取作者的所有书籍,但在应用过滤器时遇到问题。似乎我想要两个Expand()方法,但这不起作用。以下查询不起作用,但显示了我正在尝试执行的操作:
var query = from book in ODataContext.Books.Expand("BookAuthorJoins").Expand("Authors")
where book.BookAuthorJoins.Author.AuthorID = authorID
select book;
答案 0 :(得分:2)
在服务器端,1对多或多对多关系通常仅作为导航属性公开,在中间暴露连接表将使您的生活更加艰难。如果使用EF,您应该能够隐藏表,并将关系公开为导航属性。 在任何情况下,要获取特定作者的所有书籍,查询应如下所示:
/Authors(123)/Books
此查询的结果只是图书的供稿。
如果你确实暴露了连接表,那么像mig这样的工作:
/Authors(123)/BookAuthorJoins?$expand=Book
但是这一次你也可以获得所有BookAuthorJoins的书籍。