Запрос данных внутри коллекции - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь запросить фирмы, у которых есть категория, в которой поле 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()

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Я исправил свою проблему с помощью этих команд:

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);
                ;
0 голосов
/ 06 июня 2019

Вы можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...