1
resposta

Erro com group by

Estou tendo esse erro:

System.InvalidOperationException
  HResult=0x80131509
  Message=The LINQ expression 'DbSet<ItemNotaFiscal>()
    .Join(
        inner: DbSet<Faixa>(), 
        outerKeySelector: i => EF.Property<int?>(i, "FaixaId"), 
        innerKeySelector: f => EF.Property<int?>(f, "FaixaId"), 
        resultSelector: (o, i) => new TransparentIdentifier<ItemNotaFiscal, Faixa>(
            Outer = o, 
            Inner = i
        ))
    .LeftJoin(
        inner: DbSet<Album>(), 
        outerKeySelector: i => EF.Property<int?>(i.Inner, "AlbumId"), 
        innerKeySelector: a => EF.Property<int?>(a, "AlbumId"), 
        resultSelector: (o, i) => new TransparentIdentifier<TransparentIdentifier<ItemNotaFiscal, Faixa>, Album>(
            Outer = o, 
            Inner = i
        ))
    .LeftJoin(
        inner: DbSet<Artistum>(), 
        outerKeySelector: i => EF.Property<int?>(i.Inner, "ArtistaId"), 
        innerKeySelector: a0 => EF.Property<int?>(a0, "ArtistaId"), 
        resultSelector: (o, i) => new TransparentIdentifier<TransparentIdentifier<TransparentIdentifier<ItemNotaFiscal, Faixa>, Album>, Artistum>(
            Outer = o, 
            Inner = i
        ))
    .Where(i => i.Inner.Nome == "Led Zeppelin")
    .GroupBy(i => i.Outer.Inner)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
  Source=Microsoft.EntityFrameworkCore
  StackTrace:
   em Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.<VisitMethodCall>g__CheckTranslated|15_0(ShapedQueryExpression translated, <>c__DisplayClass15_0& )
   em Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   em System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   em System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   em Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
   em System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   em System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   em Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query)
   em Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async)
   em Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async)
   em Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass9_0`1.<Execute>b__0()
   em Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler)
   em Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
   em Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
   em Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1.GetEnumerator()
   em Program.<<Main>$>g__GetFaixas|0_0(AluraTunesDbContext contexto, String textoBusca, String buscaAlbum) em C:\projetos\AluraTunes\AluraTunes\LinqToEntities\Program.cs:linha 197
   em Program.<Main>$(String[] args) em C:\projetos\AluraTunes\AluraTunes\LinqToEntities\Program.cs:linha 89
1 resposta

Boa tarde. De acordo com essa solução: https://stackoverflow.com/questions/59892940/ef-3-1-overcome-linq-groupby-sql-translation-problem Meu código só funcionou depois deu dar um ToList() antes de chamar o groupby, para isso tiver que separar as consultas.

Segue o código:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Resultado no console:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Alguém saberia dizer porque deu certo só depois de fazer assim? Estou usando .NET 6

2) Estão vendo o Include ali? Só funcionou a consulta depois que coloquei isso também porque ele dava erro de referência nula porque o album vinha vazio se eu deixasse so o where. E pelo join nao consegui fazer, ai fiz com include

OBS: Ignore o ThenInclude(x => x.Artista) , estava fazendo um teste e esqueci de tirar isso, mas funciona sem ele

3) Não usei o let, como comigo so está funcionando em grande maioria com linq para consulta, eu dei um orderby depois do select, ordenando por TotalPorAlbum:

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software