使用LINQ进行双嵌套OData集合

时间:2010-12-14 16:40:57

标签: linq odata

我有一个定制的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;

1 个答案:

答案 0 :(得分:2)

在服务器端,1对多或多对多关系通常仅作为导航属性公开,在中间暴露连接表将使您的生活更加艰难。如果使用EF,您应该能够隐藏表,并将关系公开为导航属性。 在任何情况下,要获取特定作者的所有书籍,查询应如下所示:

/Authors(123)/Books

此查询的结果只是图书的供稿。

如果你确实暴露了连接表,那么像mig这样的工作:

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

但是这一次你也可以获得所有BookAuthorJoins的书籍。