如果我的SQL Server表看起来像这样,一些作者出现在多行中(意味着他们创作了多本书)。
BookID INT;
BookTitle NVARCHAR(100);
AuthorID INT;
AuthorName NVARCHAR(100);
有没有办法编写一个实体框架表达式来填充类似于以下的内存布局?
class AuthorInfo
{
int ID;
string Name;
IEnumerable<int> BookIDs;
}
换句话说,我想为每个作者创建一个对象,但是然后让BooksIDs集合包含该作者的所有书籍。
我知道我可以先加载唯一的作者,然后迭代生成的集合,为每个作者添加所有匹配的书籍。但有没有办法用一个linq语句做这样的事情?
答案 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)
});