查询集合中的数据
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);
;
我正在尝试查询具有类别的公司,其中 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);
;