实体框架查询自定义对象类与List

时间:2017-04-15 13:03:54

标签: entity-framework linq model

我正在使用Web API 2.0的实体框架工作我试图将作者书籍查询到自定义对象。

对象是:

public class AuthorBooks
{
    public Author Author;
    public List<BookDetail> BookDetails;

    public AuthorBooks() {
        Author = new Author();
        BookDetails = new List<BookDetail>();
    }
}

public class BookDetail
{
    public BookDetail()
    {
        Book = new Book();
        Category = new Category();
        SubCategory = new SubCategory();

    }

    public Book Book { get; set; }
    public Category Category { get; set; }
    public SubCategory SubCategory { get; set; }


}

此处Book,Author,Category和SubCategory是实体

目前正常运作的关系是: 作者 ----列表

public class AuthorBooks
{
    public Author Author;
    public List<Book> Book;

    public AuthorBooks() {
        Author = new Author();
        Book = new List<Book>();
    }
}

使用查询我得到了正确的结果:

AuthorBooks authorBooks = (from a in _context.Authors.Where(author => author.Id == id)
                                   join b in _context.Books on a.Id equals b.AuthorName into b1

                                   select new AuthorBooks { Author = a, Book = b1.ToList()  }).Single<AuthorBooks>();

但现在上面提到的关系:   作者 ---列表

其他实体的书籍明细与实体类别和子类别的ID相关。

那么如何使用BookDetails Id ???

 AuthorBooks authorBooks = (from a in _context.Authors.Where(author => author.Id == id)
                                   join b in _context.Books on a.Id equals b.AuthorName into b1
                                   from b2 in b1
                                   join c in _context.Categories on b2.CategoryId equals c.Id
                                   join s in _context.SubCategories on b2.SubCategoryId equals s.Id                                    
                                   select new AuthorBooks { Author = a, BookDetails = #####List<BookDetail>#######  }).Single<AuthorBooks>();

1 个答案:

答案 0 :(得分:4)

您需要join子查询中BookDetail所需的必要数据,然后group join作者查询它以获得所需作者 - 详细信息列表相关性:

AuthorBooks authorBooks = (
    from a in _context.Authors.Where(author => author.Id == id)
    join bd in (from b in _context.Books
                join c in _context.Categories on b.CategoryId equals c.Id
                join s in _context.SubCategories on b.SubCategoryId equals s.Id
                select new BookDetail { Book = b, Category = c, SubCategory = s }
    ) on a.Id equals bd.Book.AuthorName into bookDetails
    select new AuthorBooks { Author = a, BookDetails = bookDetails.ToList() }
).Single();