查询集合中的数据

Query data inside collection

我正在尝试查询具有类别的公司,其中 categoryId 字段等于我的参数。这是我的代码:

这些是我的模型:

public class Firm
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<FirmCategory> Categories { get; set; }
}

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<FirmCategory> Firms { get; set; }
}

public class FirmCategory
{
    public int FirmId { get; set; }
    public Firm Firm { get; set; }
    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

我想做这样的事情:

var firms =  _context.Firms
    .Include(x => x.Categories)
        .ThenInclude(x => x.Category)
    .AsQueryable();
firms = firms.Where(x => x.Category.CategoryId == param.CategoryId)

我知道这行不通,但这是我想通过 AsQueryable()ToList()

实现的

谢谢!

您可以使用 join 来实现相同的目标:

var firms = from firm in _context.Firms
    join formCategory in _context.FirmCategories on firm.Id equals formCategory.FirmId
    join category in _context.Categories on formCategory.CategoryId equals category.Id
    where category.Id == param.CategoryId
    select firm;

如果您想加载公司的类别,您可以:

firms = firms.Include(f => f.Categories).ThenInclude( fc => fc.Category);

我使用这些命令解决了我的问题:

var firms = _context.Firms.AsQueryable();

firms = firms
                .SelectMany(x => x.Categories)
                .Where(x => x.CategoryId == param.CategoryId)
                .Select(x => x.Firm)
                .Include(x => x.Categories).ThenInclude(x => x.Category)
                .Include(x => x.Services).ThenInclude(x => x.Service);
                ;