Select 在多个表中使用 EFCore
Select in multiple tables using EFCore
我有下面的 MySql 表架构(已恢复):
我只需要 Select 使用 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();
但此查询始终会生成一个包含零个模型的列表。我保证数据库中有要返回的值。
有什么想法我做错了吗?
非常感谢!
您应该使用 Include()
function 而不是 join。例如:
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ToList();
基于@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();
基本上,而不是 select 类别,现在我 select Product_Category 并使用 Include 添加产品和类别,从而可以使用 Where 子句。
我有下面的 MySql 表架构(已恢复):
我只需要 Select 使用 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();
但此查询始终会生成一个包含零个模型的列表。我保证数据库中有要返回的值。
有什么想法我做错了吗?
非常感谢!
您应该使用 Include()
function 而不是 join。例如:
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ToList();
基于@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();
基本上,而不是 select 类别,现在我 select Product_Category 并使用 Include 添加产品和类别,从而可以使用 Where 子句。