我正在使用 Web API 2.0 的 Entity Framework 工作 我试图将 Author Book 查询到自定义对象。
对象是:
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>();
最佳答案
您需要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();
关于entity-framework - Entity Framework 查询到带有列表的自定义对象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426381/