Невозможно включить анонимный тип из 'System.Linq.IQueryable' в 'System.Data.Entity.Core.Objects.ObjectQuery'

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

Вопрос

Следующий запрос работал хорошо с EF5, но дал мне ошибку с EF6. Я использую DbContext и CodeFirst.

Ошибка, вызванная EF6:

Невозможно 1[[<>f__AnonymousType5 тип «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 = нейтраль, PublicKeyToken = b77a5c561934e089]], Wms.Domain, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 85d69d39f5becc93]] 'для ввода' System.Data.Entity.Core.Objects.ObjectQuery 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, Культура = нейтральная, PublicKeyToken = 85d69d39f5becc93]] '. LINQ to Entities поддерживает только листинг EDM-примитивов или типов перечислений.

Запрос (упрощенный):

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();

Проблема, похоже, находится в левом объединении с анонимным типом, загруженным в переменные «заказы». Я также попытался добавить ToList () в запрос «заказы», ​​но затем ошибка изменится на:

Не удалось создать постоянное значение типа «Анонимный тип». В этом контексте поддерживаются только примитивные типы или типы перечислений.

Может кто-нибудь подскажет мне, как это исправить?

ОБНОВЛЕНИЕ: ошибка была подтверждена и разрешена в EF 6.0.2. См. Проблема в CodePlex.

Популярные ответы

Как отметил dna2 в конце своего вопроса, этот вопрос был зафиксирован в EF 6.0.2 . Чтобы обновить версию EF, выполните следующие действия в консоли диспетчера пакетов (VS2013 VIEW -> Other Windows -> Package Manager Console ).

Update-Package EntityFramework -Version 6.0.2 



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему