No se puede convertir el tipo anónimo de 'System.Linq.IQueryable' a 'System.Data.Entity.Core.Objects.ObjectQuery'

c# entity-framework entity-framework-6 linq linq-to-entities

Pregunta

La siguiente consulta funcionaba bien con EF5 pero me da un error con EF6. Yo uso DbContext y CodeFirst.

Error planteado con EF6:

No se puede convertir el tipo 'System.Linq.IQueryable 1[[<>f__AnonymousType5 4 [[System.Int32, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089], [System.Int32, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089], [System.Int32, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089], [System.Int32, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]], Wms.Domain, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 85d69d39f5becc93]] 'tipo' System.Data.Entity.Core.Objects.ObjectQuery 1[[<>f__AnonymousType5 [System.Int32, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089], [System.Int32, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089], [System.Int32, mscoror , Versión = 4.0.0.0, Cultura = neutral, PublicKeyToken = b77a5c561934e089], [System.Int32, mscorlib, Versión = 4.0.0.0, Cultura = neutral, PublicKeyToken = b77a5c561934e089]], Wms.Domain, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = 85d69d39f5becc93]] '. LINQ to Entities solo admite tipos primitivos o de enumeración EDM de conversión.

Consulta (simplificada):

var unitsPerPosition = context.Positions.Include(p => p.Unit).Select(x => new { Unit = x.Unit, Position = x });

var orders = (
                from order in context.Orders.Include(x => x.SourceLocation);
                join unitPosition in unitsPerPosition on order.UnitId equals unitPosition.Unit.UnitId
                group new { order, unitPosition } by new { LocationId = order.SourceLocationId, Level = unitPosition.Position.Level } into groupOrders
                where groupOrders.Key.LocationId != null
                select new { 
                    LocationId = groupOrders.Key.LocationId.Value, 
                    Level = groupOrders.Key.Level, 
                    LoadingOrders = groupOrders.Count(), 
                    UnloadingOrders = -1 }
            );

IList<LocationChannels> searchResult = (from s in context.Locations
        .Include(s => s.Positions)
        .Include(s => s.Positions.Select(sp => sp.Unit))

        let channels = from p in s.Positions
                        where p.LocationId == s.LocationId
                        group p by new { p.LocationId, p.Column, p.Level } into channelsGroup

                        join order in orders on new { channelsGroup.Key.LocationId, channelsGroup.Key.Level } 
                        equals new { order.LocationId, order.Level } into ordersGroup
                        from o in ordersGroup.DefaultIfEmpty()

                        select new Channel
                        {
                            LocationId = channelsGroup.Key.LocationId,
                            Column = channelsGroup.Key.Column,
                            Level = channelsGroup.Key.Level
                        }

        select new LocationChannels
                      {
                        Location = s,
                        Channels = channels,
                      })
    .Where(predicate).ToList();

El problema parece estar en la unión izquierda con el tipo anónimo cargado en la variable 'pedidos'. También intenté agregar una ToList () a la consulta de 'pedidos' pero luego el error cambia a:

No se puede crear un valor constante de tipo 'Tipo anónimo'. Solo los tipos primitivos o tipos de enumeración son compatibles en este contexto.

¿Puede alguien darme una pista sobre cómo solucionarlo?

ACTUALIZACIÓN: El error ha sido confirmado y resuelto en EF 6.0.2. Vea el problema en CodePlex.

Respuesta popular

Como señaló dna2 al final de su pregunta, este problema se solucionó en EF 6.0.2 . Para actualizar su versión de EF, haga lo siguiente en la Consola del administrador de paquetes (VS2013 VIEW -> Other Windows -> Package Manager Console ).

Update-Package EntityFramework -Version 6.0.2 



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué