Jackal
Jackal

Reputation: 3521

Get certain columns from many to many using EF Core

In a many to many relation i would like only to get certain columns from the Referencia table like Id and Name to populate a selectlist. Problem is that I haven't done this before using Linq and I don't understand what is the best way to do this process.

Here are my models.

public class Celula
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public string UAP { get; set; }
    public ICollection<MatrizCelulaReferencia> Matrizes { get; set; }
}

public class Referencia
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public bool IsActivo { get; set; }
    public ICollection<MatrizCelulaReferencia> Matrizes { get; set; }
}

public class MatrizCelulaReferencia
{
    public int Id { get; set; }

    public int CelulaId { get; set; }
    public Celula Celula { get; set; }


    public int ReferenciaId { get; set; }
    public Referencia Referencia { get; set; }

    public int ObjectivoHora { get; set; }
    public int UAPId { get; set; }
    public UAP UAP { get; set; }

    public string Tipo { get; set; }
}

Here is my current query

   var query = await _context.Referencias
                .Include(r => r.Matrizes)
                .ThenInclude(r => r.Celula)
                .Where(r => r.Matrizes.Any(c => c.CelulaId == Operador.Celula))
                .Select(x => new Referencia
                {
                    Id = // Referencia Id
                    Nome = // Referencia Name
                })
                .ToListAsync();

Right now it's kinda of a mess because I have no idea how can I select certain columns from Referencia table in this query. I only need the Id and Name

Upvotes: 0

Views: 66

Answers (1)

Chris Pratt
Chris Pratt

Reputation: 239440

The x param you're passing to the lambda is a Referencia instance, so you'd just do:

.Select(x => new Referencia
{
    Id = x.Id
    Nome = x.Nome
});

Upvotes: 1

Related Questions