用于加载分层数据的实体框架查询

时间:2011-11-29 08:40:23

标签: linq entity-framework

如果我的SQL Server表看起来像这样,一些作者出现在多行中(意味着他们创作了多本书)。

BookID INT;
BookTitle NVARCHAR(100);
AuthorID INT;
AuthorName NVARCHAR(100);

有没有办法编写一个实体框架表达式来填充类似于以下的内存布局?

class AuthorInfo
{
    int ID;
    string Name;
    IEnumerable<int> BookIDs;
}

换句话说,我想为每个作者创建一个对象,但是然后让BooksIDs集合包含该作者的所有书籍。

我知道我可以先加载唯一的作者,然后迭代生成的集合,为每个作者添加所有匹配的书籍。但有没有办法用一个linq语句做这样的事情?

1 个答案:

答案 0 :(得分:1)

这有用吗? (我没试过。)

var authorInfos = DbContext.BooksAuthors
.GroupBy (ba => new { AuthorId = ba.AuthorId, AuthorName = ba.AuthorName })
.Select (g => new AuthorInfo { 
    ID = g.Key.AuthorId, 
    Name = g.Key.AuthorName,
    BookIDs = g.Select (ba => ba.BookId)
});