entity-framework - Entity Framework 查询到带有列表的自定义对象类

标签 entity-framework linq model

我正在使用 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/

相关文章:

c# - 如何从整数列表中计算排名?

php - cakephp 模型验证错误消息未显示在 hasOne 关联中

python - 可编辑的 QTableView 和 Pandas 不能正常工作

javascript - 如何通过 AJAX (Spring MVC) 使用新模型重新加载 JSP 的特定部分?

c# - MVC 模型 - 应用程序 (EF) 中的一个或多个 dbcontext

c# - ObjectStateManager 不包含引用类型对象的 ObjectStateEntry

c# - MVC View 中显示的 Linq 连接查询

c# - 遍历字典中的字典

c# - 如何在初始化列表之前在查询中获取值

c# - Entity Framework Code First 在创建 1 :n relationship 时在数据库中生成两个外键列