Фильтровать свойство навигации EF core - PullRequest
1 голос
/ 16 марта 2019

В своем репозитории я пытаюсь отфильтровать продукты с активными вариантами, но я не знаю как, потому что это первый раз.Я должен вернуть все продукты с активными вариантами или без них

public async Task<IEnumerable<Articolo>> GetArticoliByDivisioneAsync(string divisione)
{
    return await _ctx.Articoli
                     .Where(a => a.Divisione == divisione
                                 && a.Category!= "001")
                     .Include(i => i.Varianti)
                     .Include(i => i.FotoArticoli)               
                     .ToListAsync();
}

Поле, которое я хочу отфильтровать, находится в Varianti.

Как это сделать .Where(v => v.Active == 1)?

Ответы [ 3 ]

1 голос
/ 16 марта 2019

Просто добавьте свой фильтр в where Метод

public async Task<IEnumerable<Articolo>> GetArticoliByDivisioneAsync(string divisione)
{
    return await _ctx.Articoli
        .Where(a => a.Divisione == divisione
                  && a.Category!= "001"
                  && a.Varianti.Any(v=>v.Active == 1))
        .Include(i => i.Varianti)
        .Include(i => i.FotoArticoli)               
        .ToListAsync();
}

, если вам не нужно значение Varianti, вы можете удалить включаемую часть

public async Task<IEnumerable<Articolo>> GetArticoliByDivisioneAsync(string divisione)
{
    return await _ctx.Articoli
        .Where(a => a.Divisione == divisione
                  && a.Category!= "001"
                  && a.Varianti.Any(v=>v.Active == 1))
        .Include(i => i.FotoArticoli)               
        .ToListAsync();
}
0 голосов
/ 18 марта 2019

Чтобы получить все продукты с активными вариантами, необходимо создать проекцию на новый объект товара и там варианты фильтра

Это решение

public async Task<IEnumerable<Articolo>> GetArticoliByDivisioneAsync(string divisione)
{
    return await _ctx.Articoli
                     .Where(a => a.Divisione == divisione
                                 && a.Category!= "001")
                     .Include(i => i.Varianti)
                     .Include(i => i.FotoArticoli)               
                     .Select(x => new Articolo
                    {
                        Codice = x.Codice ,
                        Prezzo = x.Prezzo ,
                        Varianti = x.Varianti.Where(v => v.attivo== 0).ToList(),
                        FotoArticoli = x.FotoArticoli
                    })           
                .ToListAsync();
}
0 голосов
/ 16 марта 2019

Добавить в Where() предложение и использовать Any():

return await _ctx.Articoli
        .Include(i => i.Varianti)
        .Include(i => i.FotoArticoli)
        .Where(a => a.Divisione == divisione
                  && a.Category!= "001"
                  && a => a.Varianti.Any(v => v.Active == 1))

        .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...