Entity Framework Запрос для загрузки иерархических данных - PullRequest
0 голосов
/ 29 ноября 2011

Если бы у меня была таблица SQL Server, которая выглядит примерно так, некоторые авторы появляются в нескольких строках (это означает, что они являются авторами нескольких книг).

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

Есть ли способ написать выражение Entity Framework, которое заполнило бы макет памяти, подобный следующему?

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

Другими словами, я хотел бы иметь один объект для каждого автора, но затем иметь коллекцию BooksIDs, содержащую все книги для этого автора.

Я знаю, что мог сначала загрузить уникальных авторов, а затем повторить полученную коллекцию, чтобы добавить все соответствующие книги для каждого автора. Но есть ли способ сделать что-то подобное с помощью одного оператора linq?

1 Ответ

1 голос
/ 29 ноября 2011

Это работает? (Я не пробовал.)

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)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...