使用EFCore在多个表中选择

时间:2018-07-29 16:28:03

标签: mysql asp.net-core ef-core-2.1

我在下面有MySql表架构(恢复):

Database Schema

我只需要在使用EFCore的查询中选择类别数据:

    List<CategoryViewModel> viewModel = await _context.Category
    .Join(_context.Product_Category, c => c.CategoryId, pc => pc.CategoryId, (c, pc) => new { c, pc })
    .Join(_context.Product, cpc => cpc.pc.ProductId, p => p.ProductId, (cpc, p) => new { cpc, p })
    .Where(cpcp => cpcp.p.EstablishmentId == paramEstablishmentId) //paramEstablishmentId comes via parameter
    .Select(vm => new CategoryViewModel()
    {
      Id = vm.cpc.pc.category.CategortId,
      Name = vm.cpc.pc.category.Name,
      Image = vm.cpc.pc.category.ImagePath,
      Description = vm.cpc.pc.category.Description
    })
    .ToListAsync();

但是此查询始终会导致列表中包含零个模型。我保证数据库中有要返回的值。

任何Ideia我在做什么错?

非常感谢!

2 个答案:

答案 0 :(得分:2)

您应该使用Include()函数而不是join。例如:

var blogs = context.Blogs
    .Include(blog => blog.Posts)
    .ToList();

答案 1 :(得分:0)

基于@Flyzzx答案(非常感谢,朋友),我已将查询修改为:

  List<CategoryViewModel> viewModel = await _context.Product_Category
    .Where(pc => pc.Product.EstablishmentId == EstablishmentId)
    .Include(pc => pc.Product)
    .Include(pc => pc.Category)
    .Select(c => new CategoryViewModel()
    {
      Id = c.Category.Id,
      Name = c.Category.Name,
      Image = c.Category.ImagePath,
      Description =  c.Category.Description
    }).Distinct()
    .ToListAsync();

基本上,现在我选择了Product_Category,而不是选择Categories,并使用Include添加了Products和Categories,从而可以使用Where子句。