过滤导航属性EF核心

问题描述 投票:1回答:3

在我的存储库中,我尝试使用变体激活过滤产品,但我不知道因为是第一次。我应该返回所有带有或不带变体的产品

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)

c# linq entity-framework-core
3个回答
1
投票

只需将您的过滤器添加到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
投票

添加到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();

0
投票

要获得具有活动变体的所有产品,需要对新文章对象进行投影,并使用过滤器变体

这是解决方案

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.